Java长整形
话说有这样一个小例子: 
MICROS_PER_DAY表示一天的微秒数 
MILLIS_PER_DAY表示一天的毫秒数 
然后下面例子的结果是多少呢?
1 public class Test3 { 2 public static void main(String[] args) { 3 final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; 4 final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000; 5 System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY); 6 } 7 }
So easy 
数据类型为 long ,很容易保存这两个乘积不产生溢出. 
因此,结果肯定是 1000!
but….. 结果是:数据溢出!!!
但是但是long能表示 -2的63次方到2的63次方-1的整数. 
数都数不过来,怎么会溢出? 
小心陷阱啊,虽然我们定义的是long类型, 
准确的说最终的结果应该是long类型的.
我们看看表达式右边, 
24 * 60 * 60 * 1000 * 1000 
这个表达式是以int类型作为运算的, 
int跟int类型相乘,结果还是int类型, 
最终结果超过int所能保存的范围,所以数据溢出了, 
然后才被long所保存;
改进 
 
24 * 60 * 60 * 1000 * 1000–>24L * 60 * 60 * 1000 * 1000
在表达式随便哪个数值后面加上一个l或者L就搞定了, 
其结果会自动转换为long而不是int了,然后再保存到long类型变量中.
很简单
原文地址:http://blog.csdn.net/CodeAi/article/details/46704777?locationNum=8&fps=1
                    
                
                
            
        
浙公网安备 33010602011771号