装箱:把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。int包装成Integer、float包装成Float
拆箱:和装箱相反,将引用类型的对象简化成值类型的数据
基本数据类型的包装类是引用类型,基本类型是值引用,所以包装类是一个对象
Integer a = new Integer(100);
Integer b = 100;
System.out.println("m12 result " + (a == b)); // m12 result false
new Integer(100) 是创建一个对象,所以他的值是存在堆中,在栈中存的只是一个对象地址。
Integer b = 100;这种赋值方式会自动调用Integer的valueOf()缓存(如果值大于127不会缓存)为基本类型,所以这个也就相当于 int b=100,
所以 b 的值是存在栈中,而==是值比较,所以输出的结果是false。
当包装类声明的数据大于127或者小于-128时。就会重新再new一个新的包装类对象,把多余的数据存到新的包装类对象中
Float 和 Double不管声明的值是多少,都会return false,
拆箱:和装箱相反,将引用类型的对象简化成值类型的数据
基本数据类型的包装类是引用类型,基本类型是值引用,所以包装类是一个对象
Integer a = new Integer(100);
Integer b = 100;
System.out.println("m12 result " + (a == b)); // m12 result false
new Integer(100) 是创建一个对象,所以他的值是存在堆中,在栈中存的只是一个对象地址。
Integer b = 100;这种赋值方式会自动调用Integer的valueOf()缓存(如果值大于127不会缓存)为基本类型,所以这个也就相当于 int b=100,
所以 b 的值是存在栈中,而==是值比较,所以输出的结果是false。
包装类型 | 基本数据类型 | 缓存对象(基本数据类型值) |
Boolean | boolean | true,false(全部值) |
Byte | byte | -128~127(全部值) |
Short | short | -128~127 |
Character | char | 0~127 |
Integer | int | -128~127(默认为127) |
Long | long | -128~127 |
Float | float | 无缓存值 |
Double | double | 无缓存值 |
当包装类声明的数据大于127或者小于-128时。就会重新再new一个新的包装类对象,把多余的数据存到新的包装类对象中
Float 和 Double不管声明的值是多少,都会return false,
public void m12() {
// a b = 0.0也是false
Double a = 1.0;
Double b = 1.0;
System.out.println("m12 result " + (a == b)); // m12 result false
}
public static void test() {
DataType dt = new DataType();
dt.m11();
dt.m12();
}
public void m11() {
Integer a = new Integer(100);
Integer b = 100;
System.out.println("m11 result " + (a == b)); //m11 result false
}
public void m12() {
Integer a = new Integer(128);
Integer b = 128;
System.out.println("m12 result " + (a == b)); //m12 result false
}
public void m21() {
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println("m21 result " + (a == b));//m21 result false
}
public void m22() {
Integer a = new Integer(128);
Integer b = new Integer(128);
System.out.println("m22 result " + (a == b));//m22 result false
}
public void m31() {
Integer a = 100;
Integer b = 100;
System.out.println("m31 result " + (a == b));//m31 result true
}
public void m32() {
Integer a = 128;
Integer b = 128;
System.out.println("m32 result " + (a == b));//m32 result false
}
public void m41() {
Integer a = Integer.valueOf(100);
Integer b = 100;
System.out.println("m41 result " + (a == b));//m41 result true
}
public void m42() {
Integer a = Integer.valueOf(128);
Integer b = 128;
System.out.println("m42 result " + (a == b));//m42 result false
}