Integer比较大小

这篇具有很好参考价值的文章主要介绍了Integer比较大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。

例子1:

Integer a5 = new Integer(-128);

Integer a6 = new Integer(-128);

System.out.println(a5 == a6); // fasle

二、Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动将Integer拆箱为int,然后进行比较,实际上就变为两个int变量的比较)

举例2:

int a8 = 127;

Integer a9 = new Integer(127);

System.out.println(a8 == a9); // true

三、非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)

举例3:

Integer num1 = -128;

Integer num2 = new Integer(-128);

System.out.println(num1 == num2); // false

四、对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

举例4:

Integer a1 = -128;

Integer a2 = -128;

System.out.println(a1 == a2); // true



Integer a3 = 129;

Integer a4 = 129;

System.out.println(a3 == a4); //false

原理分析:

Integer i = -128 或者Integer i = 127的时候,会调用 Integer中的 valueOf()方法
当在-128到127范围内,有IntegerCache缓存,所以对象是一样的

   public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

这段代码的作用是,在Integer类装载入内存时,把[-128, 127]范围内的整型数据装包成Integer类,并将其对应的引用放入到cache数组中。

从上面的源码可以看出,valueOf()在返回之前,会进行判断,判断当前 i的值是否在 -128到127之间。
如果存在,则直接返回引用,不再重新开辟内存空间。
如果不存在,就创建一个新的对象。
利用缓存,这样做既能提高程序执行效率,还能节约内存。

Integer i1 = 20; Integer i2 = 20; 因为 IntegerCache中已经存在此对象,直接返回引用,引用相等并且都指向缓存中的数据,所以这时候i1 == i2返回true。

Integer i1 = 200; Integer i2 = 200;因为i1,i2的值大于127,不在[-128, 127]范围内,所以虚拟机会在堆中重新new一个 Integer对象来存放200,创建两个对象就会产生两个这样的空间。两个空间的地址不同,返回到栈中的引用的值也就不同,所以这时候i1 == i2返回false。文章来源地址https://www.toymoban.com/news/detail-477605.html

到了这里,关于Integer比较大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java——它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。

    这是一个Java程序,它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。程序的基本流程如下: 首先,声明并初始化变量data和result,它们的初始值都为0。 然后,输出提示信息,要求用户输入一个整数。 接下来,使用BufferedReader类从

    2024年02月11日
    浏览(44)
  • Integer比较大小

    一、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。 例子1: 二、Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较

    2024年02月08日
    浏览(34)
  • Integer类型的比较

    Java篇 为什么在以下代码中,一个结果为true,而另一个则为false? 因为 Java 默认会比较 数据 在 JVM 堆中的地址,而 JVM 会将 Integer 转成 int 来进行比较,恰巧在 Integer 类中提供了内部静态类 IntegerCache 用来自动拆箱和装箱,数值范围为 -128 ~ 127 。 所以当比较的值在此区域时,

    2024年02月19日
    浏览(33)
  • Integer比较时用==还是equals

    目录 一、== 二、修改integer的缓存范围 三、使用equals         一般情况在代码代码中比较interger的值时用==是没有问题的,但是也存在一定的范围。          可以看到,当Integer表示的值在[-128 ~ 127]之间,使用==时能达到我们的预期的。           可是一旦超过这个范围,

    2024年02月14日
    浏览(34)
  • 标准成本和实际成本的比较分析

    ERP软件中一般都有多种成本核算方法可供选择,通常分为两大类:标准成本法和实际成本法。实际成本法中一般再分为移动加权平均法、先进先出法、后进先出法等等。说起来各种方法并无优劣之分,然而为什么顾问常常推荐采用标准成本法?为什么企业中(尤其是国有企业

    2024年02月03日
    浏览(34)
  • vue - 比较两个日期大小、比较同一天两个时间大小(判断两个日期时间的大小)JS 解决方法

    vue项目中,可能需要对比两个日期时间的大小,如下代码所示: 它们谁大? 方法一: 方法二:

    2024年02月11日
    浏览(73)
  • Matlab 保存指定像素大小的图片, 为什么保存图的实际大小与设置的不一致?

     matlab使用getframe函数保存指定像素大小的图片。 使用 set(gcf, \\\'position\\\', [124,124,800,800]);设置图片位置和大小,可将图片保存为256x256大小。 (代码第3行) 仅把\\\'position\\\'参数从124改成125时,不能保存为期望的256x256大小,反而是320x320大小,这是为什么??(代码第4行) 试试其他几

    2024年02月12日
    浏览(49)
  • Java:LocalDateTime比较大小

    LocalDateTime是Java 8中的一个日期时间类,它继承自LocalDate和LocalTime,可以表示一个不含时区信息的日期时间对象。通过LocalDateTime可以方便地进行日期时间计算、格式化等操作  1、equals()方法 2、compareTo()方法 3、isBefore()方法  4、isAfter()方法 需要注意的是,当使用compareTo()方法比

    2024年04月26日
    浏览(35)
  • BigDecimal 类型 比较大小

    2024年02月09日
    浏览(41)
  • BigDecimal比较大小

    BigDecimal a = new BigDecimal (101); BigDecimal b = new BigDecimal (111);   //使用compareTo方法比较 //注意:a、b均不能为null,否则会报空指针 if(a.compareTo(b) == -1){     System.out.println(\\\"a小于b\\\"); }   if(a.compareTo(b) == 0){     System.out.println(\\\"a等于b\\\"); }   if(a.compareTo(b) == 1){     System.out.println(\\\"a大于b

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包