integer比較

public class EqualsMethodjava

{
     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對象。 this

2. new Integer(1) 和Integer a = 1不一樣,前者會建立對象,存儲在堆中,然後者由於在-128到127的範圍內,不會建立新的對象,而是從IntegerCache中獲取的。
3.int與Integer做比時,Integer會自動拆箱。
相關文章
相關標籤/搜索