比如说有这么一个题目,让你计算出100年中有多少秒,你会怎么做?
可能你认为很简单,比如你这么写这个程序:
public class test {
public static void main(String []args){
long count = 0;
count = 60 * 60 * 24 * 365 * 100 ;
System.out.print(count);
}
}
你知道运算结果是什么吗?是按照你所想的结果?肯定不是要不然我怎么会在这里写这么无聊的东西,结果是负数:-1141367296
知道原因吗?对,溢出!60 ,100 这些数字都是整数,所以他们在进行相乘的时候的结果已经超出了int的最大表示范围,也就导致了溢出,所以结果不正确。
但是如何改正呢?于是我们想到了,和不加上一个long类型的数据将结果转换成long类型呢?这样不就可以使得结果正常表示了嘛,于是我们在程序上做了如下修改:
public class test {
public static void main(String []args){
long count = 0;
count = 60 * 60 * 24 * 365 * 100 * 1L;
System.out.print(count);
}
}
运行程序:结果:-1141367296
又错了!什么原因呢?是这样的,java里面的运算是从左至右的,所以再进行count的计算的时候,前面的整形数据的结果已经溢出了,所以这个“1L”在这里没起到任何作用,我们只要将这个1L移到前面即可了,如下程序
public class test {
public static void main(String []args){
long count = 0;
count = 1L * 60 * 60 * 24 * 365 * 100;
System.out.print(count);
}
}
这样便得到了最终想要的结果。
在说一个小程序:
public class test {
public static void main(String []args){
int i = 0;
for (i = 1;i <= 10; i++);{
System.out.print(i);
}
}
}
知道这个程序的结果是什么吗?
结果是1-10?不是,是11,
注意for循环后的分号,正是这个分号导致了for循环是空循环,没有进行任何计算,所以最终输出了,i的最终结果,也就是11.
程序中有很多细节啊,一不小心就掉到程序的陷阱了。