基本数据类型之心跳陷阱——总结三

题目是:假设一个人的心跳每分钟跳70次,或到70岁,那么他的心脏总共跳多少下呢?

这是我最近从书上看到的一个关于心跳的运算。说白了,就是数据类型的取值长度。咱也不分婴幼儿、青壮年、老年心跳不一样,也不分运动不运动,就假设每分钟一样,行吧?

那不就是:

public static void main(String[] args) {
		int dayTimes = 70 * 60 * 24;
		int yearTimes = dayTimes * 365;
		int lifeTimes = yearTimes * 70;
		System.out.println(lifeTimes);
}

这个结果是:-1719527296。??????怎么可能呢?一个人的心跳数是负值呢?更何况这个是几个正整数的相乘,没理由会出现负值哈。懵逼吧。

貌似发现了什么,计算结果超出了int长度。那换个方法算算。

public static void main(String[] args) {
		long lifeTimes = 70*60*24*365*70;
		System.out.println(lifeTimes);
}

还是-1719527296。不行?再加个东西。

public static void main(String[] args) {
		long lifeTimes = 70*60*24*365*70*1L;
		System.out.println(lifeTimes);
}

又是-1719527296。我要卒了。换换顺序呢?

public static void main(String[] args) {
		long lifeTimes = 1L*70*60*24*365*70;
		System.out.println(lifeTimes);
}

哇,终于算到了,是2575440000。那我变化下呢?

public static void main(String[] args) {
		long lifeTimes = 70L*60*24*365*70;
		System.out.println(lifeTimes);
}

 OK,是2575440000。那在转换下呢?

public static void main(String[] args) {
		long lifeTimes = (long)70*60*24*365*70;
		System.out.println(lifeTimes);
	}

阔以,还是2575440000。

public static void main(String[] args) {
		long lifeTimes = (long)(70*60*24*365*70);
		System.out.println(lifeTimes);
	}

啪,打回原形,-1719527296。唉。

通过对比发现,计算过程中,如果遇到了更高的数据类型(int类型的数据运算中遇到了long型的数据)才做必要的转换。所以当遇到“1L”时,已经计算了“70*60*24*365*70”结果,而此结果是int类型的,尽管表达式最后会因“1L”转变成long型,但是溢出已经发生了,此时的“1L”并没有起到预期效果。所以,放到前面久OK了。

另外,长整型数据的后缀是“L”或者“l”,但是建议用“L”,以免字母“l”与数字“1”混淆。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值