包装类及常量池

1、基本数据类型byte、short、int、long、char、boolean的包装类用到了常量池,大小在127以内的从常量池获取;

2、基本数据类型中float、double没有实现常量池技术;

3、java中字符串实现常量池技术;

public class Test {
    public static void main(String[] args) {

        Integer i1 = 100;
        Integer i2 = 100;
        System.out.println(i1 == i2);//true,都指向对象池的一个空间地址
        i1 = 200;
        i2 = 200;
        System.out.println(i1 == i2);//false,超过对象池大小127,则各自开辟新的空间地址
        i1 = new Integer(100);
        i2 = new Integer(100);
        System.out.println(i1 == i2);//false,2个不同的引用地址
        Float f1 = 100f;
        Float f2 = 100f;
        System.out.println(f1 == f2);//false,float,double 没有实现对象池技术,相当于各自开辟自己的空间
        String s1= "zhansan";
        String s2= "zhansan";
        System.out.println(s1 == s2);//true,string 实现了对象池技术,s1 s2都指向对象池的一个空间地址
        String s3= new String("zhansan");
        System.out.println(s2 == s3);//false,s3指向新开辟的堆空间
    }
}

上述示例字符串内存示意图如下:

上图中s4="hello,"+s1,会在常量池中增加“hello,zhangsan",如果有频繁操作字符串的场景,为了不在常量池中出现大量的中间变量,建议适用StringBuilder,通过StringBuilder生成的字符串不会在常量池生成额外的中间变量

StringBuilder builder = new StringBuilder("hello,");
builder.append("zhangsan,").append("你好");//不会在常量池中新增”hello,zhangsan,你好“的字符串
System.out.println(builder);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值