package java_wrapper;
public class WrapperTest {
public static void main(String[] args) {
Integer one = Integer.valueOf(100);
Integer two = Integer.valueOf(100);
System.out.println("one==two的结果:"+(one == two)); //1
Integer three = 100; //自动装箱
//Integer three = Integer.valueOf(100); //自动完成和one, two一样的操作
System.out.println("three==100的结果:"+(three == 100)); //2 自动拆箱
Integer four = 100;
//Integer four = Integer.valueOf(100);
System.out.println("three==four的结果:"+(three == four)); //3
Integer five = 200;
System.out.println("five==200的结果:"+(five == 200)); //4
Integer six = 200;
System.out.println("five==six的结果:"+(five == six)); //5
}
}
输出:
one==two的结果:true
three==100的结果:true
three==four的结果:true
five==200的结果:true
five==six的结果:false
注意注释为3和5的结果,为什么同样的操作结果不同呢?
那是因为当数值在-128~127之间,进行自动装箱时会在对象池中判断有没有这个数值,有就直接用,没有就重新构造一个。在注释3语句中,数值为100,返回值为true,注释5中,数值为200,返回值为false。
在8中基本数据类型对应的包装类中,除了float和double,其他的都可以应用常量池概念。
例如:
package java_wrapper;
public class WrapperTest {
public static void main(String[] args) {
Double d1 = Double.valueOf(100);
System.out.println("d1==100的结果:"+(d1 == 100));
Double d2 = Double.valueOf(100);
System.out.println("d1==d2的结果:"+(d1 == d2));
}
}
输出:
d1==100的结果:true
d1==d2的结果:false