你够细心吗?来试试看!

 比如说有这么一个题目,让你计算出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.

程序中有很多细节啊,一不小心就掉到程序的陷阱了。


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值