我的回答和楼上的很多哥们差不多,分享几道- class Demo1
- {
- public static void main(String[] args)
- {
- byte b = 3;
- b = 2+b;
- System.out.println(b);
- }
- }
复制代码结果:编译不能通过,可能损失精度 分析原因:因为byte在内存占2个字节,整数2在内存中占四个字节,当2+b在运算过程会把b自动提升到4个字节进行运算,运算完毕会把占四个字节的5赋予占两个字节的b,这样做就可能损失精度。 解决途径:(1)把 b = 2+b;改为: b = byte(2+b);这叫强制转换,即把占四个字节的数int强制转换成byte
到面试中的关于这方面的题,希望对你有帮助
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。 对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
|