java整除符号是什么意思_Java长整除问题

public class Change{

public static void main(String args[]){

final long L1=24* 60 * 60 * 1000 * 1000;

final long L2=24* 60 * 60 * 1000;

System.out.println(L1/L2);

}

}

/**

* output: 5

*/

为什么输出的是5呢?

再看下面的代码输出:

public class Change{

public static void main(String args[]){

final long L1=24L* 60 * 60 * 1000 * 1000;

final long L2=24L* 60 * 60 * 1000;

System.out.println(L1/L2);

}

}

/**

* output: 1000

*/

这个的输出才是我们想要的结果。到底发生了什么?

这是因为常数L1的计算“确实”溢出了。尽管计算的结果适合放入long中,并且其空间还有富余,但这个结果并不适合放入int中。这个计算完全是以int运算来执行的,并且只有在运算完成之后,其结果才被提升到long,而此时已经太迟了:计算已经溢出了,它返回的是一个小了200倍的数值。从int到long是一种拓宽原始类型转换,它保留了(不正确的)数值。这个值之后被L2整除,而L2的计算是正确的,因为它适合int运算。这样整除的结果就得到了5。

那为什么是int运算来执行的呢?因为所有乘在一起的因子都是int数值。广州java培训当你将两个int数值相乘时,你将得到另一个int数值。java不具有目标确定类型的特性,只是一种语言特性,其含义是指存储结果的变量的类型会影响到计算所使用的类型。

通过使用long常量来替代int常量作为每一个乘积的第一个因子,就可以很容易的订正这个程序。

这个教训很简单:当你在操作很大的数字时,千万要提防溢出,即使用来保存结果的变量已显得足够大,也并不意味着产生结果的计算具有正确的类型。当你拿不准时,就使用long运算来执行整个计算。

疯狂软件Java培训、iOS培训新年钜惠,报名Java就业班免费赠送Java基础班,报名iOS就业班免费赠送iOS基础班,本月火速抢座中,为回报广大新老学员,值此新年之际推出报读就业班赠送基础班的活动。

--------------------2014年初活动--------------------------

疯狂软件Java学习班方向:

1.报读JavaEE就业班赠送基础班课程。

2.开班一次性(一个月内)交清JavaEE就业班学费,赠送基础班全套课程。

疯狂软件iOS学习班方向:

1.报读iOS应用+手游就业班赠送iOS基础班课程。

2.开班一次性(一个月内)交清iOS应用+手游就业班就业班学费,赠送基础班全套课程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值