请看两种代码一、byte a1=1,a2=2,a3,a4;a3=a1+a2;a4=1+2;这段代码有没有问题,有问题的话出在第几行,为什么有问题,怎样改?解答:代码有问题,原因如下1. 第2行,a3=a1+a2,Java中,byte short char在计算时将会被转为int类型,a1+a2这个变量是int类型的,将其赋值给a3必定编译出错;2. 第3行正确,Java有常量优化机制,在编译时已经把1+2的结果即3赋给了a4,虽然在java中常量整形的默认数据类型是int,浮点形的默认数据类型是double,但也可将其赋值给byte short,只是当常量的值在被赋给变量数据类型范围之外时,打印该变量时的结果不对,
(所谓常量优化机制,即编译器在编译时先判断表达式右侧是否都是常量 如果都是常量则在编译阶段就先将常量的运算结果计算出来 然后直接赋值给左侧变量 而不是在运行时再计算赋值)
如byte test1=128;System.out.println(test1);Console输出:-128二、byte a=1;a++;a+=1;a=a+1;这段代码有没有错误,如果有,错误在哪里,为什么出错,怎么改?答案:有错误,错误在第4行原因:1.第4行代码a+1为int类型的变量,将其赋值给a(byte类型)会编译出错2.第2、3行代码没有错误,a+=1;<=>a=(byte)(a+1);,a++;会自动转换变量类型3. a+=1中的+=是一个运算符,这比a=a+1运算时要快