java128陷阱

128陷阱

public static void main(String[] args) {    Integer num1 = 100;     Integer num2 = 100;     System.out.println(num1 == num2);       Integer num3 = 128;     Integer num4 = 128;     System.out.println(num3 == num4); } 

ture

false

解析:

答案就在Integet的valueOf()方当中,如果我们的数值在-128-127之间的数值都存储在有一个catch数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在内存当中的地址,所以在-128-127之间的数值用==进行比较是相等的。而不在这个区间的数,需要新开辟一个内存空间,所以不相等。

自动拆装箱和128陷阱

基本数据类型 == 比较值

引用数据类型 == 比较地址

用 equals() 判断,自动装箱 ,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在内存当中的地址,所以在-128-127之间的数值用==进行比较是相等的。

而不在这个区间的数,需要新开辟一个内存空间,所以不相等。

public static void main(String[] args) {    int  a = 10;    int  b = 10;    Integer a1 = 10;    Integer b1 = 10;    Integer a2 = new Integer(10);    Integer b2 = new Integer(10);    System.out.println(a == b);      // T   基本数据类型 == 比较值    System.out.println(a1 == b1);      // T  128陷阱    System.out.println(a2 == b2);      // F  引用数据类型 == 比较地址    System.out.println(a1 == a);      // 用 == 判断,一个是int,一个是integer自动拆箱    System.out.println(a1.equals(a));      // 用 equals() 判断,自动装箱      System.out.println(a1 == a2);    System.out.println(a == a2);     // 用 == 判断,一个是int,一个是integer自动拆箱 } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值