java长整除问题浅谈
时间:2023-05-22 06:06:23
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数值。当你将两个int数值相乘时,你将得到另一个int数值。java不具有目标确定类型的特性,只是一种语言特性,其含义是指存储结果的变量的类型会影响到计算所使用的类型。
通过使用long常量来替代int常量作为每一个乘积的第一个因子,就可以很容易的订正这个程序。
这个教训很简单:当你在操作很大的数字时,千万要提防溢出,即使用来保存结果的变量已显得足够大,也并不意味着产生结果的计算具有正确的类型。当你拿不准时,就使用long运算来执行整个计算。
标签:java,长整除
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
c# Selenium爬取数据时防止webdriver封爬虫的方法
2023-06-24 07:50:51
![](https://img.aspxhome.com/file/2023/7/59117_0s.png)
java两个integer数据判断相等用==还是equals
2021-06-14 00:46:52
java中压缩文件并下载的实例详解
2022-01-01 04:59:12
Mybatis日志模块的适配器模式详解
2023-11-26 12:45:32
C#利用GDI+画图的基础实例教程
2023-09-30 06:23:39
![](https://img.aspxhome.com/file/2023/1/82161_0s.png)
SpringBoot FreeWorker模板技术解析
2023-08-09 09:14:39
![](https://img.aspxhome.com/file/2023/6/57826_0s.png)
Android编程四大组件之BroadcastReceiver(广播接收者)用法实例
2023-07-23 16:45:39
C#逆变与协变详解
2021-10-25 08:07:54
![](https://img.aspxhome.com/file/2023/1/98261_0s.jpg)
Android ListView 实现上拉加载的示例代码
2021-09-16 18:04:17
![](https://img.aspxhome.com/file/2023/2/126782_0s.gif)
零基础写Java知乎爬虫之先拿百度首页练练手
2022-11-14 09:07:05
![](https://img.aspxhome.com/file/2023/8/81238_0s.png)
IDEA 2021.1 的 Win 和 Mac 快捷键大全
2023-02-27 13:01:28
如何使用Kotlin进行Android开发
2022-10-20 07:37:21
![](https://img.aspxhome.com/file/2023/9/100619_0s.png)
推荐史上最全的IDEA好用插件
2023-02-22 21:35:04
![](https://img.aspxhome.com/file/2023/8/62378_0s.png)
Android 媒体开发之MediaPlayer状态机接口方法实例解析
2023-04-20 06:53:22
![](https://img.aspxhome.com/file/2023/3/139413_0s.gif)
Android编程使用android-support-design实现MD风格对话框功能示例
2022-05-19 03:46:39
![](https://img.aspxhome.com/file/2023/6/90176_0s.png)
SpringBoot集成EasyExcel的步骤
2023-07-19 09:59:17
SpringBoot集成Jpa对数据进行排序、分页、条件查询和过滤操作
2022-03-06 19:17:50
![](https://img.aspxhome.com/file/2023/7/70507_0s.png)
Filter过滤器和Listener监听器详解
2021-08-20 07:39:38
springboot中validator数据校验功能的实现
2021-07-31 17:43:50
![](https://img.aspxhome.com/file/2023/2/69322_0s.png)
Intellij Idea中进行Mybatis逆向工程的实现
2021-06-05 00:08:53