- ~
如下程序段的輸出結果爲:java
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); } }
正確答案: B
A false,false
B false,true
C true,false
D true,true緩存
使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介於-128至127直接時,做爲基本類型。 使用Integer a = new Integer(1); 時,不管值是多少,都做爲對象。
有些人說的看源碼選C,這裏有個誤區所謂的緩存,是在使用valueOf的時候使用的, Integer n3 = Integer.valueOf(47) Integer n4 = Integer.valueOf(47); 這裏的n3==n4纔是true。 若是直接使用new一個對象,從構造函數來看: public Integer(int value) { this.value = value; } 就是徹底不一樣的兩個對象,沒有使用所謂的緩存。
有以下4條語句:()函數
Integer i01=59; int i02=59; Integer i03=Integer.valueOf(59); Integer i04=new Integer(59);
如下輸出結果爲false的是:
正確答案: C
A System.out.println(i01==i02);
B System.out.println(i01==i03);
C System.out.println(i03==i04);
D System.out.println(i02==i04);this
①不管如何,Integer與new Integer不會相等。不會經歷拆箱過程, ②兩個都是非new出來的Integer,若是數在-128到127之間,則是true,不然爲false java在編譯Integer i2 = 128的時候,被翻譯成-> Integer i2 = Integer.valueOf(128);而valueOf()函數會對-128到127之間的數進行緩存 ③兩個都是new出來的,都爲false ④int和integer(不管new否)比,都爲true,由於會把Integer自動拆箱爲int再去比