Java 8种基本类型包装类和String的常量池

Byte,Short,Integer,Long

通过如下代码输出可以看出常量池数值范围为-128~127。

Integer i1 = -129;
Integer i2 = -129;
System.out.println("i1=i2\t" + (i1 == i2));

i1 = -128;
i2 = -128;
System.out.println("i1=i2\t" + (i1 == i2));

i1 = 127;
i2 = 127;
System.out.println("i1=i2\t" + (i1 == i2));

i1 = 128;
i2 = 128;
System.out.println("i1=i2\t" + (i1 == i2));

输出结果:
i1=i2 false
i1=i2 true
i1=i2 true
i1=i2 false

Character

通过如下代码输出可以看出常量池数值范围为0~127。

Character i1 = (char)-1;
Character i2 = (char)-1;
System.out.println("i1=i2\t" + (i1 == i2));

i1 = (char)0;
i2 = (char)0;
System.out.println("i1=i2\t" + (i1 == i2));

i1 = (char)127;
i2 = (char)127;
System.out.println("i1=i2\t" + (i1 == i2));

i1 = (char)128;
i2 = (char)128;
System.out.println("i1=i2\t" + (i1 == i2));

输出结果:
i1=i2 false
i1=i2 true
i1=i2 true
i1=i2 false

Boolean

通过如下代码输出可以看出它也具有常量池。

Boolean i1 = true;
Boolean i2 = true;
System.out.println("i1=i2\t" + (i1 == i2));

输出结果:
i1=i2 true

Float,Double

Float和Double无常量池。

Float i1 = 127F;
Float i2 = 127F;
System.out.println("i1=i2\t" + (i1 == i2));

Double i3 = 127D;
Double i4 = 127D;
System.out.println("i3=i4\t" + (i3 == i4));

输出结果:
i1=i2 false
i3=i4 false

String

引用文章:
https://tech.meituan.com/in_depth_understanding_string_intern.html
简单总结:可以通过使用双引号声明出来的String对象的方式和String.intern的方式在字符串常量池中生成对象。若字符串常量池中对象已存在,则无需重复生成对象。同时注意1.6和1.7的重要区别。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值