美文网首页
认识Java中的表达式

认识Java中的表达式

作者: 王一萍o叩丁狼教育 | 来源:发表于2018-08-21 16:40 被阅读0次

    1.1. 表达式(掌握)

    表达式(expression),是由数字、运算符、括号、常量、变量等以能求得结果的组合。

    image.png

    表达式举例(下列a、b、x、y、z都表示变量)。

    n a + b
    
    n 3.14 + a
    
    n (x + y) * z + 100
    

    1.1.1. 基本数据类型转换(掌握)

    在8大基本数据类型中,boolean不属于数值类型,所以不参与转换,其他类型的转换规则如下图。一般的,byte、short、char三种类型相互之间不参与转换操作。

    image.png

    按照转换方式,有两种(注意:boolean类型不参与类型转换):

    • 自动类型转换:范围小的数据类型直接转换成范围大的数据类型,小->大。

    • 强制类型转换:范围大的数据类型强制转换成范围小的数据类型,大->小。

    image.png

    问题:三个大小不同容器,能相互把盛装的水倒给对方吗?

    float占4个字节为什么比long占8个字节大?(科普了解)
    
    --->因为底层的实现方式不同
    
    浮点数的32位并不是简单直接表示大小,而是按照一定标准分配的。
    
    第1位,符号位,即S
    
    接下来8位,指数域,即E。
    
    剩下23位,小数域,即M,取值范围为[1 ,2 ) 或[0 , 1)
    
    然后按照公式:V = (-1) ^ s * M * 2 ^ E  
    

    也就是说浮点数在内存中的32位不是简单地转换为十进制,而是通过公式来计算而来,通过这个公式虽然,只有4个字节,但浮点数最大值要比长整型的范围要大。

    1.1.1.1. 自动类型转换(掌握)

    自动类型转换,也称为“隐式类型转换,就是把范围小的数据类型直接转换成范围大的数据类型。

    转换规则:byte、short、char—>int—>long—>float—>double

    注意事项:byte、short、char相互之间不转换,他们参与运算首先转换为int类型

    语法格式:范围大的数据类型 变量 = 范围小的数据类型值;

    语法举例:

    public class TypeConvertDemo1{
    
      public static void main(String[] args) {
    
        //把int类型变量转为long类型
    
        long longNumber = 17;//整数默认为int类型
    
        //把long类型转换为float类型
    
        float f1 = longNumber;
    
        //把float类型转换为double类型
    
        double d = f1;
    
        //定义两个int类型的变量
    
        int a1 = 2;
    
        int b1 = 3;
    
        int c1 = a1 + b1;
    
        //定义一个byte类型,一个int类型
    
        byte b2 = 2;
    
        int c2 = 3;
    
        System.out.println(b2 + c2);
    
        //byte、short、char类型参与运算时把自己提升为int类型
    
        //byte d1 = b2 + c2;//编译报错
    
        //int d2 = b2 + c2;//编译报错
    
        int d3 = b2 + c2;//编译通过
    
      }
    
    }
    

    1.1.1.2. 自动类型提升(掌握)

    当一个算术表达式中,包含多个基本数据类型的常量或变量(boolean除外)时,整个算术表达式的结果类型将在出现自动提升,其规则是:

    • 所有的byte、short、char类型被自动提升到int类型,再参与运算

    • 整个表达式的最终结果类型,被提升到表达式中类型最高的类型

    System.out.println('a' + 1);//98
    
    byte b = 22;
    
    b = b + 11;//编译出错,此时结果类型应该是int
    
    double d1 = 123 + 1.1F + 3.14 + 99L ;
    
    image.png

    结论:算数表达式的结果就是其中范围最大的数据类型。

    1.1.1.3. 强制类型转换(掌握)

    强制类型转换,也称为“显式类型转换”,就是把范围大的数据类型强制转换成范围小的数据类型。

    语法格式:范围小的数据类型 变量 = 范围小的数据类型范围大的数据类型值;

    注意:不建议,有可能损失精度

    public class TypeConvertDemo2{
    
      public static void main(String[] args) {
    
        int a = 2;
    
        byte b = 3;
    
        //自动类型转换
    
        int c = a + b;
    
        //强制类型转换
    
        byte d = (byte) (a + b);
    
        //把double转换为int类型
    
        int i = (int)3.14;
    
        System.out.println(i);//3
    
      }
    
    }
    

    若要获得最好的学习效果,需要配合对应教学视频一起学习。需要完整教学视频,请参看https://ke.qq.com/course/272077

    相关文章

      网友评论

          本文标题:认识Java中的表达式

          本文链接:https://www.haomeiwen.com/subject/yryjiftx.html