Java中包装类型使用‘==’比较的坑

1、缓冲机制

在Java中,Integer 、Byte 、Short 、Long 、Character 五大包装类都有缓冲机制,
且缓冲的默认值范围都是 -128 ~ 127

而Float 、Double 、Boolean 三大包装类并没有缓冲机制。

2、创建包装类对象

两种方法:
(1)构造器方法(就是new出来):不论值的大小,返回的将都会是一个新对象;

(2)自动装箱(就是编译器自动调用包装类的valueOf方法):首先会判断数值是否在-128 ~ 127的范围内,
    如果满足条件,则会从缓存(常量池)中寻找指定数值,若找到缓存,则不会新建对象,
    只是指向指定数值对应的包装类对象,否则,新建对象。

3、自动装箱创建对象时,使用“==”进行比较

在Java中,"=="用于比较两个基本数据类型或两个引用数据类型是否指向同一对象。

对于有缓冲机制的五大包装类,使用自动装箱创建对象时,由于它们的值在-128 ~ 127之间时会被缓存,因此这些值相同的包装类型对象会指向同一个对象,使用"=="比较会返回“true”。

但是,超出这个范围的值创建的包装类对象不是同一个对象,即使值相同,使用"=="也会返回“false”。

// 自动装箱创建对象,值在 -128 到 127 之外
Integer a = 128;
Integer b = 128;
System.out.println(a == b); 
// 输出 false

// 自动装箱创建对象,值在 -128 到 127之间
Integer a = 126;
Integer b = 126;
System.out.println(a == b); 
// 输出 true

4、构造器方法创建对象时,使用“==”进行比较

使用构造器方法创建对象时,不论值的大小,返回的将都会是一个新对象;


// 构造器方法创建对象
Integer a = new Integer(126);
Integer b = new Integer(126);
System.out.println(a == b); 
// 输出 false

5、包装类型 与 基本类型 使用“==”进行比较

在java中,当使用包装类型 与 基本类型 进行“==”进行比较时,包装类型会进行自动拆箱操作。
也就是说,两者是进行数值的对比,那么无论数值多少,只要值相等就会返回 true。

// 构造器方法创建对象
Integer a = new Integer(126);
int b = 126;
System.out.println(a == b); 
// 输出 true

6、包装类型使用“equals()”进行比较

"equals()" 方法会比较两个对象的数值是否相等,而不是比较是否指向同一个对象。 因此,无论包装类型对象的值相等,使用"equals()"方法比较都会返回 true。
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值