package com.newedu.jb.day14.exercise;
/**
* 装箱 和拆箱
*
* 装箱: 将基本数据类型转换为 包装类类型
* 拆箱:将包装类类型 转换为基本数据类型
*
*
* 装箱和拆箱 其实是编译器帮我们优化结果:
*
* 装箱:编译器帮我们调用了 Integer.valueOf()方法
* 拆箱:编译器帮我们调用了 Integer.intValue()方法
* 举例说明:
*
* Integer
* @author jerry
*
*/
1, public class IntegerDemo {
public static void main(String[] args) {
Integer i = new Integer(4);
Integer x = 4;//jdk1.5 之后,有自动装箱的概念
x = x+5;//Integer + int -> 先拆箱(int+int) 再装箱 int ->Integer
System.out.println("=============");
Integer y = null;
// y = 5;
y = y + 4;
// 先拆箱(y.intValue(),在装箱
System.out.println(y);
System.out.println("===========");
Integer i1 = 1;
i1 += 1;
System.out.println("======Integer 缓冲池=========");
}
}
2,
package com.newedu.jb.day14.exercise;
/**
* Integer的缓冲池的概念
*
*
* @author jerry
*
*/
public class IntegerDemo2 {
public static void main(String[] args) {
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
// new 出来的东西,就是新创建一个东西
// == 比较运算符 , 比较值, 如果是基本数据类型,其实比较的就是值本身。
// 如果 == 两边是引用类型的话 ,其实是比较对象的地址值。
System.out.println(i1 == i2); //false
System.out.println(i1.hashCode());
System.out.println(i2.hashCode());
System.out.println(i1.equals(i2));//true
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4);// false
System.out.println(i3.equals(i4));//true
System.out.println("==================");
Integer i5 = 127;// 自动的装箱 Integer.valueOf()
Integer i6 = 127;
System.out.println(i5 == i6); //true 为什么是true?
System.out.println(i5.equals(i6));//true
Integer.valueOf(127);
//
System.out.println("==================");
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);// false
System.out.println(i7.equals(i8));//true
/**
* Integer 内部维护了一个 内部类,内部类中维护了一个数组
* Integer[] cache = new Integer[255]
* cache[0] = new Integer(-128)
* cache[1] = new Integer(-127)
* cache[2] = new Integer(-126)
* ....
* cache[255] = new Integer(127);
*
*
* 把数组,叫做缓冲池。
* -128 到127 之间,在自动装箱的时候,都是返回的同一个对象。
* 超过了这个返回,每装箱一次,就重新new一个对象并返回。
*/
}
}
/**
* 装箱 和拆箱
*
* 装箱: 将基本数据类型转换为 包装类类型
* 拆箱:将包装类类型 转换为基本数据类型
*
*
* 装箱和拆箱 其实是编译器帮我们优化结果:
*
* 装箱:编译器帮我们调用了 Integer.valueOf()方法
* 拆箱:编译器帮我们调用了 Integer.intValue()方法
* 举例说明:
*
* Integer
* @author jerry
*
*/
1, public class IntegerDemo {
public static void main(String[] args) {
Integer i = new Integer(4);
Integer x = 4;//jdk1.5 之后,有自动装箱的概念
x = x+5;//Integer + int -> 先拆箱(int+int) 再装箱 int ->Integer
System.out.println("=============");
Integer y = null;
// y = 5;
y = y + 4;
// 先拆箱(y.intValue(),在装箱
System.out.println(y);
System.out.println("===========");
Integer i1 = 1;
i1 += 1;
System.out.println("======Integer 缓冲池=========");
}
}
2,
package com.newedu.jb.day14.exercise;
/**
* Integer的缓冲池的概念
*
*
* @author jerry
*
*/
public class IntegerDemo2 {
public static void main(String[] args) {
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
// new 出来的东西,就是新创建一个东西
// == 比较运算符 , 比较值, 如果是基本数据类型,其实比较的就是值本身。
// 如果 == 两边是引用类型的话 ,其实是比较对象的地址值。
System.out.println(i1 == i2); //false
System.out.println(i1.hashCode());
System.out.println(i2.hashCode());
System.out.println(i1.equals(i2));//true
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4);// false
System.out.println(i3.equals(i4));//true
System.out.println("==================");
Integer i5 = 127;// 自动的装箱 Integer.valueOf()
Integer i6 = 127;
System.out.println(i5 == i6); //true 为什么是true?
System.out.println(i5.equals(i6));//true
Integer.valueOf(127);
//
System.out.println("==================");
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);// false
System.out.println(i7.equals(i8));//true
/**
* Integer 内部维护了一个 内部类,内部类中维护了一个数组
* Integer[] cache = new Integer[255]
* cache[0] = new Integer(-128)
* cache[1] = new Integer(-127)
* cache[2] = new Integer(-126)
* ....
* cache[255] = new Integer(127);
*
*
* 把数组,叫做缓冲池。
* -128 到127 之间,在自动装箱的时候,都是返回的同一个对象。
* 超过了这个返回,每装箱一次,就重新new一个对象并返回。
*/
}
}