java长整除问题浅谈

 更新时间:2013年11月25日 16:32:15   作者:  
这篇文章主要介绍了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数值。当你将两个int数值相乘时,你将得到另一个int数值。java不具有目标确定类型的特性,只是一种语言特性,其含义是指存储结果的变量的类型会影响到计算所使用的类型。

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

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

相关文章

  • idea mac版打开是出现打开失败问题及解决

    idea mac版打开是出现打开失败问题及解决

    这篇文章主要介绍了idea mac版打开是出现打开失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 详解如何通过Java实现压缩PDF文档

    详解如何通过Java实现压缩PDF文档

    PDF文档是我们日常办公中使用最频繁的文档格式。但因为大多数PDF文档都包含很多页面图像或大量图片,这就导致PDF文档过大,处理起来较为麻烦。本文将介绍如何通过Java应用程序压缩PDF文档,需要的可以了解一下
    2022-12-12
  • JavaWeb之会话技术案例详解

    JavaWeb之会话技术案例详解

    这篇文章主要介绍了JavaWeb之会话技术案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • SpringBoot和Vue.js实现的前后端分离的用户权限管理系统

    SpringBoot和Vue.js实现的前后端分离的用户权限管理系统

    本文主要介绍了SpringBoot和Vue.js实现的前后端分离的用户权限管理系统,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 构建Maven多模块项目的方法

    构建Maven多模块项目的方法

    这篇文章主要介绍了构建Maven多模块项目的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • mybatis集成到spring的方式详解

    mybatis集成到spring的方式详解

    这篇文章主要介绍了mybatis是如何集成到spring的,将mybatis集成到spring之后,就可以被spring的ioc容器托管,再也不用自己创建SqlSessionFactory 、打开SqlSession等操作,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Springcloud Config配置中心使用与相关介绍

    Springcloud Config配置中心使用与相关介绍

    springcloud config是一个解决分布式系统的配置管理方案。它包含了 client和server两个部分,server端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client端通过接口获取数据、并依据此数据初始化自己的应用
    2022-09-09
  • JAVA swing布局管理器实例解析

    JAVA swing布局管理器实例解析

    这篇文章主要介绍了JAVA swing布局管理器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 最值得Java开发者收藏的网站

    最值得Java开发者收藏的网站

    这篇文章主要为大家分享了最值得Java开发者收藏的11个网站,帮助Java开发者提升编程能力
    2016-11-11
  • Spring cloud alibaba之Gateway网关功能特征详解

    Spring cloud alibaba之Gateway网关功能特征详解

    spring cloud gateway是spring cloud推出的第二代网关,是由WebFlux+Netty+Reactor实现的响应式的API网关,它不能在传统的servlet容器中工作,也不能构建成war包,接下来通过本文给大家分享Spring cloud alibaba--Gateway网关,需要的朋友可以参考下
    2021-08-08

最新评论