面试题: 看下面的程序是否有问题 如果有问题请指出 并说明 (关于数据类型-隐性转换的小陷阱)

来源:互联网 发布:vb小游戏 编辑:程序博客网 时间:2024/04/29 04:58
package Exercise;


public class Text_10 {
// 面试题: 看下面的程序是否有问题 如果有问题请指出 并说明
public static void main(String[] args) {
byte b1 = 3;
byte b2 = 4;
// 无法编译 byte b4 = b1 + b2;
// 答案:存在隐性转换,因此会自动提升到int类型,但原数据类型是byte,所以需要强制转换
int b41 = b1 + b2;
byte b42 = (byte) (b1 + b2);
System.out.println("b41=" + b41 + ";b42=" + b42);


short s = 1;
// s=s+1; 编译不通过的,提示损失精度 。
s = (short) (s + 1);// 答案:存在隐性转换,因此会自动提升到int类型,但原数据类型是short,所以需要强制转换


short s1 = 1;
s1 += 1; /*
* 能编译通过。隐式类型转换可以从小到大自动转
* 即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换 , 而s+=1的意思与s
* = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,
* 由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换,
* 所以将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符, 在解析时候s+=1就等价于s =
* (short)(s+1), 翻番来讲就是 s+=1 <=> s = (s的类型)(s+1)。
*/
阅读全文
0 0
原创粉丝点击