Version: Next
包装类
装箱与拆箱
- 装箱:
- 构造方法
Integer(int value)
Integer(String s)
- 静态方法:
static Integer valueOf(int i)
- 构造方法
- 拆箱:
- 成员方法:
int intValue()
- 成员方法:
@Test
public void testInteger() {
Integer value = new Integer(11);
Integer valueString = new Integer("12");
Integer valueStatic = Integer.valueOf(13);
System.out.println(value);
System.out.println(valueString);
System.out.println(valueStatic);
//拆箱
int intValue = value.intValue();
System.out.println(intValue);
}
自动装箱、拆箱
自动装箱与自动拆箱: Since JDK 1.5,基本类型的数据和包装类之间可以自动的相互转换
/***
* 自动拆箱与自动装箱
* 自动装箱:直接将int类型的整数赋值给包装类
* 自动拆箱:包装类无法直接参与运算,自动转化为基本数据类型在进行计算,算完的结果再自动装箱
*/
@Test
public void testAutoWarp() {
//自动装箱
Integer in = 1;
//自动拆箱
in = in + 2;
//ArrayList无法存储基本类型,但是可以存储包装类
ArrayList<Integer> list = new ArrayList<>();
//int -> Integer --> 自动装箱
list.add(2);
//自动拆箱,Integer -> int
int a = list.get(0);
}
基本类型与字符串之间的相互转化
基本类型 -> 字符串
- 基本类型的值+
""
- 包装类的静态方法
toString(参数)
- String类的静态方法,
valueOf(参数)
- 基本类型的值+
字符串 -> 基本类型
使用包装类的静态方法
parseXxxx(“数值类型的字符串”)
Integer.parseInt("12");
@Test
public void testStringTransferBasicType() {
int i1 = 100;
String s1 = i1 + "";
String string = Integer.toString(11);
String s = String.valueOf(13);
//100200
System.out.println(s1 + 200);
System.out.println(string + 200);
System.out.println(s + 200);
System.out.println("-----------------------------------------");
int i = Integer.parseInt("123");
System.out.println(i - 10);
}
100200
11200
13200
-----------------------------------------
113
缓冲池(Cache)
==
阿里巴巴编程规范:比较相同类型的包装类对象之间值,使用 equals 方法,而不是包装类对象原本是引用对象,若使用 == 只是比较两个引用变量是否指向相同的对象。在JDK1.5之后有了自动装箱、拆箱。对于 Integer 对象来说,初始值在-128 ~ 127时会将对象放入缓存池(IntegerCache.cache),下次调用相同的值将直接复用,在该区间的Integer 对象可直接进行判读
该区间以外的对象在 Heap 上产生,不会进行复用。所以推荐使用 equals
方法进行判断。
Integer a = 1;
Integer b = 1;
// 输出 ture
System.out.println(a == b);
Integer c = 123;
Integer d = 123;
// 输入 true
System.out.println(c == d);
Integer e = 129;
Integer f = 129;
// 输入 false
重要
Integer包装类有IntegerCache用于缓存Integer对象,固定范围是 -128 ~ 127
Byte 包装类有 ByteCache 用于缓存 Byte 对象,固定范围是 -128 ~ 127
Short 包装类有 ShortCache 用于缓存 Short 对象,固定范围是 -128 ~ 127
Long 包装类有 LongCache 用于缓存 Long 对象,固定范围是 -128 ~ 127
Character 包装类有 CharacterCache 用于缓存 Character 对象,固定范围是 0 ~ 127
除了 IntegerCache 其他包装类的缓存机制均不可以改变范围。
具体可看对应包装类源码中的
valueOf()
方法