表达式转型注意事项

来源:互联网 发布:ios10 连接网络 编辑:程序博客网 时间:2024/06/03 17:24

转载自:
http://www.cnblogs.com/bokeofzp/p/4745681.html

1.java中表达式转型需要注意

实例如下:

byte b1=1,b2=2,b3,b6;final byte b4=4,b5=6;b6=b4+b5;b3=(b1+b2);System.out.println(b3+b6);

问会出现什么状况:
A、输出结果:13,
B、b6=b4+b5 编译出错
C、b3=b1+b2编译出错
D、运行异常

首先表达式转型注意以下规则:

①所有的byte,short,char型的值将被提升为int型;

②如果有一个操作数是long型,计算结果是long型;

③如果有一个操作数是float型,计算结果是float型;
④如果有一个操作数是double型,计算结果是double型;
首先2个byte类型相加,会自动提升为int,计算的结果也是int因此需要强制转化会byte,而被fianl修饰的变量不会改变,会被JVM优化,当2个final修饰相加时候会根据左边变量的类型而转化,作为这2个final变量的最终类型。
如下面的代码:
编译运行都是通过的,final int和final byte相加是整形和byte型都可以,不需要强制转换。

public static void main(String[] args) {           final int a=2;    final byte a2=3;    int a3=a+a2;    byte a4=a+a2;    System.out.println(a4);                }

必须指出,表达式的类型将严格保持和表达式中最高等级操作数相同的类型。
如果表达式中包含了字符串,则又是另一番情形了。看如下代码:

public static void main(String[] args) {           System.out,println("Hello!"+ 'a' + 7);      System.out,println('a' + 7 + "Hello!");            }
输出结果:Hello!a7104Hello!

对于第一个表达式““Hello!”+ ‘a’ + 7”,先进行“Hello!” + ‘a’运算,把’a’转换为字符串,拼接成字符串Hello!a,接着进行”Hello!a” + 7运算,这也是一个字符串连接运算,得到结果Hello!a7;
对于第二个表达式先进行‘a ’+ 7运算,‘a’自动提升到int类型, 变成a对应的ASCII值:97,从“97+ 7”将得到104,然后进行“104”+ “Hello!”运算,104会自动转换为字符串类型,将变成两个字符串的连接运算,从而得到104Hello!

0 0
原创粉丝点击