今天在做题的时候,遇到这样一个基础题题:
public class Test {
public static void main(String[] args) {
long num = 2147483648;
num += 2L;
System.out.println(num);
}
}
问输入的结果是多少?
当时选择的:2147483650,错了,在eclipse中测试,发现编译无法通过,
才发现long型数据后面没有就+L,然后就去查资料,在文章中发现:
《java解惑》中有介绍:
原因在于java不具有‘目标确定类型’的特性(指存储结果的变量的类型会影响到计算所使用的变量类型),就是说java不会主动把你要计算的24606010001000变成你要存入的x变量的long类型,而是先以int类型进行计算,得到的应该是86400000000L,但是java把它当做int,存不下,溢出了,截取得到500654080再保存到int中, 最后int转成long赋值给x,最后的结果就不准确了;
避免这种情况的常用方法是给 第一个因子添加类型L;
加上L后运行通过,基础不扎实,细节不到位,罪过,罪过。