包装类的常量池技术

JAVA中的Integer等四种包装类对[-128,127]有缓存,Character对[0,127]有缓存,而Float和Double无常量池。当比较这些包装类的值时,应使用equals方法,因为==比较的是对象的内存地址。例如,Integera=128与Integerb=128的内存地址不同,所以a==b为false,而127与127的Integer对象会从常量池获取,内存地址相同,故相等。
摘要由CSDN通过智能技术生成

JAVA中的八种包装类。

在这里插入图片描述

  • Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127]的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True orFalse
  • 两种浮点数类型的包装类 Float,Double 并没有实现常量池技术。
  • 所有整型包装类对象之间值的比较,全部使用 equals 方法比较。

代码展示:

Integer a = 128;
Integer b = 128;
System.out.println(a == b); //false

/*
java中为了提高程序的执行效率,将[-128到127]之间所有的包装对象提前创建好,
放到了一个方法区的“整数型常量池”当中了,目的是只要用这个区间的数据不需要
再new了,直接从整数型常量池当中取出来。

原理:x变量中保存的对象的内存地址和y变量中保存的对象的内存地址是一样的。
 */
Integer x = 127;
Integer y = 127;
// == 永远判断的都是两个对象的内存地址是否相同。
System.out.println(x == y); //true
Integer tt = 128;
Integer tt1 = 127;
System.out.println(tt==tt1);//false
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JH3073

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值