文章目录
前言:
- 这六个类实现常量池技术:Byte,Short,Integer,Long,Character,Boolean。另外两种浮点数类型的包装类则没有实现常量池技术
- String实现常量池技术。
1. 6个包装类
1.1 Integer
1.1.1 Integer指向常量池的时机
只要:
① 直接赋值给Integer类变量。
② 且值在-128 ~ 127
那么该变量指向常量池。eg:Integer a = 127;
- 原理:
- 例子:
1.1.2 Integer 与 int 使用 == 比较
- 基本数据类型
==
对应的包装类:比较值是否相等。
因为,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,这里的Integer,不管是直接赋值,还是new创建的对象,只要跟int比较就会拆箱为int类型,所以表现为直接比较值是否相等。
1.2 Byte | Short | Character | Long | Boolean
- 指向常量池的时机
- Byte、Short、Long :直接赋值
-128 ~ 127
- Character:直接赋值
0 ~ 127
- Boolean:直接赋值true、false都在常量池
- 包装类 == 对应基本类型:和Integer逻辑一样。
2. String
String s = "abc";
:到方法区的常量池中去查找是否有"abc"
,有则将该字符串的地址给s;没有则在常量池创建"abc"
,再将其地址给s。
String s = new String("abc");
:先在堆中实例化String对象,并将堆地址给s,再在常量池中查找是否有"abc"
,有则将该字符串的地址给String对象的value属性;没有则在常量池创建"abc"
,再将其地址给value属性。
- 练习:
①
②
③