Java Integer类型比较大小 java中包装类的比较用法

本文探讨了Java中Integer类型在不同数值范围内的比较方法,分析了使用==和equals()的区别,并给出了最佳实践建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java Integer类型比较大小 java中包装类的比较用法

一、前言

        java中 ,包装类是一个对象,也是一个具体的数值。对于对象比较可以用 equals()方法,对于数值的比较可以用 == 进行比较,那么对于包装类该用那种方法比较合适呢?

二、实验代码如下
        Integer a1=120;
        Integer b1=120; 
        System.out.println(a1==b1); // true
        System.out.println(a1.equals(b1)); // true
        System.out.println("<-------分割线 1----------->");
         
        Integer a2=133;
        Integer b2=133;
        System.out.println(a2==b2); // false 注意这个结果不一样。
        System.out.println(a2.equals(b2)); // true
        System.out.println("<-------分割线 2----------->")

三、原因分析

        1、通过实验代码可以看到, a2 == b2 的结果与 a1==b1 结果不一样。
         2、 使用java反编译工具,对代码反编译可以看到:(  java反编译工具下载
原代码: Integer a1=120;
编译后: Integer a1 = Integer.valueOf(120); 
        说明了,包装类在进行直接赋值的时候,底层调用的是 Integer.valueOf()方法,通过查看JDK源码:
        3、可以看到,从jdk1.5开始,Integer提供了一个内部类,IntegerCache , 数值范围在 Integer 

(-128 ~ 127)之间(byte 类型的范围 ),是不会新建对象,调用的是数据缓冲池中的值。

 

~

四、最终结论
        总结: 在 byte类型范围内, 包装类用 == 和 equals()方法比较值是一样的,超出byte范围, == 即
使数值结果一样,但是 == 返回的false,因为 Integer 底层新建了对象,不是同一个地址值。
        结论: java中包装类请使用 equals()方法进行比较!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值