今天我发现我的一个程序是错误的,因为隐式演员不起作用,更好的说它没有像我期望的那样工作.
我有这样的事情
long normal = 1000*24*3600*1000;
System.out.println("normal :"+normal);
Run Code Online (Sandbox Code Playgroud)
正常:500.654.080
询问excel正确的计算输出应该是86.400.000.000;
我去了java手册,长数据类型的最大值应该是2 ^ 63-1,即:9.223.372.036.854.780.000
然后我试图强迫演员长,它似乎工作:
long normal = 1000*24*3600*1000;
long explicit = 1000*24*3600*1000l; // 1000l <- letter L used at the end for long
long cast = 1000*(long)(24*3600*1000);
System.out.println("normal :"+normal);
System.out.println("explicit :"+explicit );
System.out.println("cast :"+cast);
Run Code Online (Sandbox Code Playgroud)
正常:500.654.080
显式:86.400.000.000
演员:86.400.000.000
我认为正在发生的是,java在整数溢出发生时将计算作为整数运算.
Java隐式不应该将那些整数转换为长整数?
在 Java 中,当使用 进行计算时,无论用于分配结果的变量的类型如何,结果都integers将始终为。integer
将一个(或全部)数字文字分配为 Long 是一种可行的方法,正如您自己已经发现的那样:
long implicit = 1000L*24*3600*1000;
Run Code Online (Sandbox Code Playgroud)
编辑:如注释中所述,Java 中的操作数是从左到右计算的,因此至少左侧的第一个操作数应指定为 Long
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |