问题一 :byte b1 = 3,b2 = 4,b; b = b1 + b2 ; b = 3 + 4;那句会编译失败,为什么?
解析:byte b1 = 3,b2 = 4,b; 是定义了三个byte类型的变量
b = b1 + b2; 程序会先将类型转换位int类型,再相加,所以类型出错
b = 3 + 4 ; 常量,是先计算结果,再看结果是否超出byte范围,超出者报错
总结:两个变量相加,首先要类型w问题 ,常量是先计算,,然后看结果是否在赋值的范围内,在则不报错 b =
问题二 : byte b = 130,有没有问题?如果想让赋值正确,可以怎么做?起结果是多少
解析:计算机的运算都是在补码上进行的,首先要得到补码
A:获得130的二进制
00000000 00000000 00000000 10000010
整数的补码,原码,反码都一样
B :做截取操作,换成byte类型
10000010 但这是补码
C : 求出原码
符号位 数值位
补码 1 0000010
反码 1 00000001
原码 1 1111110
所以结果为-126
问题三 : short s = 1 ; s = s+1; 与short s = 1; s+=1;
两个代码有没有问题,为什么?
解析:
扩展的赋值运算其实隐含了一个强制类型转换
s += 1;等价于 s = (s的数据类型)(s+1);
问题四:交换两个数据的值
A:用中间变量去接受
B: 用位异或实现,一个数据与另一个数据异或两次,等于自己
C :用变量相加
D: 一句话搞定 b = (a+b) -(a =b)
问题五:byte ,long ,String 可以作为switch的表达式吗?
byte可以 long不行 String在JDK7之后可以