昨天去面试,虽然体验不是很好, 但是看到了这个面试题,当时感觉无从下手,所以在这里记录一下。
解决这道题之前,先复习一下Java的基本数据类型转换规则,以便后面对面试题的理解。
java的基本数据类型转换
-
自动类型转换:小–>大
byte-->short-->int-->long-->float-->double
-
强制类型转换:大–>小
小类型 变量名 = (大类型) 值
注意:自增/自减运算符、复合赋值运算符底层做了优化,内部自动强制类型转换;
如:
++, --, +=, -=, ......
-
类型提升:是指在多种不同数据类型的表达式中,类型会自动向范围表达大的值的数据类型提升;
long count = 1000000; int price = 1999; long totalPrice = price * count;
正文——面试题
1. short s1 = 1; s1 = s1 + 1;
错误!
根据java的基本数据类型转换规则,s1为short类型的变量,在表达式s1 = s1 + 1;
中,s1会自动转为int类型与1进行运算,运算结果为int类型,而int类型的值 赋值给short类型的变量时需要强制类型转换。
2. short s1 = 1; s1 += 1;
正确!
在复合赋值运算符底层自动进行强制类型转换,所以此处实际上是s1 = (int) s1 + 1;
因为此处有强制类型转换,所以编译可以通过。