在计算过程中,遇到高位数据类型才会转换,未遇到,不会转换
测试实例:
- class TestDemo
- {
- public static void main(String[] args)
- {
- long a=70*60*24*365*70;
- System.out.println(a);
- }
- }
复制代码
结果为
原因是70、60、24、365、70都是int类型,他们的运算结果自然也是int类型,得到的结果超出int范围,导致结果溢出,赋值给long类型的变量a时,自动转换为long类型,之前结果已经掉失精度,赋值给long自然也掉失了
解决方法,在运算时加入long类型操作数
- class TestDemo
- {
- public static void main(String[] args)
- {
- long a=70*60*24*365*70*1L;//在最后*1L
- System.out.println(a);
- }
- }
复制代码
结果依然为:
问题未解决,虚拟机只有在遇到高数据类型才会提升,除了byte,short会自动提升。
所以代码应该这样写:
- long a=1L*70*60*24*365*70;
复制代码
结果为
这样问题才算解决
也可以这样写:
或者这样写
- long a=(long)70*60*24*365*70;
复制代码
但不能这样写
- long a=(long)(70*60*24*365*70);
复制代码 |
|