1:long l = 1024*1024*1024*4; //0
2:int i1 = 1024*1024*1024*4; //0
3:int i2 = 220000000000; //错误
4:long l1 = 220000000000; //错误
5:long l1 = 220000000000L; //正确
1-4都是超过int(-2^31 — 2^31-1)的范围,为什么1-2不报错且值是0,而3-4却是错的呢?
根据"直接量"不超过范围,可以直接赋值。根据这个原则。
以1-4为例,这个范围是 "直接量"的自身范围(int范围)还是被赋值方的范围(long范围)呢?
求解答,谢谢!
Integer.MAX_VALUE + 1 ,这样不报错,-2147483648
2147483648,这样就直接报错。
long l = 1024*1024*1024*4; 结果是0
long l = 4294967296; 这样就直接报错。
1024*1024*1024*4 = 4294967296,它们是相等的
真的有点蒙了!
long l1 = Integer.MAX_VALUE + 1 ,这样不报错,-2147483648
long l2 = 2147483648,这样就直接报错。
这样是不是跟乘法一样道理啊?
是的
他会先向上转型
然后截取部分