A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在计算过程中,遇到高位数据类型才会转换,未遇到,不会转换
测试实例:
  1. class TestDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         long a=70*60*24*365*70;
  6.         System.out.println(a);
  7.         }
  8. }
复制代码

结果为
  1. -1719527296
复制代码

原因是70、60、24、365、70都是int类型,他们的运算结果自然也是int类型,得到的结果超出int范围,导致结果溢出,赋值给long类型的变量a时,自动转换为long类型,之前结果已经掉失精度,赋值给long自然也掉失了
解决方法,在运算时加入long类型操作数
  1. class TestDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         long a=70*60*24*365*70*1L;//在最后*1L
  6.         System.out.println(a);
  7.         }
  8. }
复制代码

结果依然为:
  1. -1719527296
复制代码

问题未解决,虚拟机只有在遇到高数据类型才会提升,除了byte,short会自动提升。
所以代码应该这样写:
  1. long a=1L*70*60*24*365*70;
复制代码

结果为
  1. 2575440000
复制代码

这样问题才算解决
也可以这样写:
  1. long a=70L*60*24*365*70;
复制代码

或者这样写
  1. long a=(long)70*60*24*365*70;
复制代码

但不能这样写
  1. long a=(long)(70*60*24*365*70);
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马