integer比较

public class EqualsMethod

{
    public static void main(String[] args)
    {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.print(n1 == n2);
        System.out.print(",");
        System.out.println(n1 != n2);
    }
}

 

首先 我们要知道 == 这个比较符号
==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
"=="和"!="比较的是地址 指第一个new()c出来的地址
所以因为两次new() 分出的内存也不同
所以
System.out.print(n1 == n2);返回 false

!=就返回true

 

还有例子

Integer n33 = Integer.valueOf(47);
Integer n44 = Integer.valueOf(47);
System.out.println(n33 == n44);

Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.print(n1 == n2);
System.out.print(",");
System.out.println(n1 != n2);

打印结果
true
true
false,true

这里有个误区所谓的缓存,是在使用valueOf的时候使用的,

Integer n3 = Integer.valueOf(47)

Integer n4 = Integer.valueOf(47);

这里的n3==n4才是true。

如果直接使用new一个对象,从构造函数来看:

    public Integer(int value) {

        this.value = value;

    }

就是完全不同的两个对象,没有使用所谓的缓存。
 

1.  -128<= x<=127的整数,将会直接缓存在IntegerCache中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是从缓存中获取已经创建好的Integer对象;当大于这个范围的时候,直接new Integer来创建Integer对象。

2. new Integer(1) 和Integer a = 1不同,前者会创建对象,存储在堆中,而后者因为在-128到127的范围内,不会创建新的对象,而是从IntegerCache中获取的。
3.int与Integer作比时,Integer会自动拆箱。
 
posted @ 2019-06-13 16:37  那些年的代码  阅读(894)  评论(0编辑  收藏  举报