2016-05-05 6 views
0

Ausgabe sind: true, true *, false * Was passiert bei case = 1 und case = 2 wenn case: 1 ist wahr als warum? Wert 5 hat unterschiedliche Speicherbelegung? wir wissen, dass '==' Operator auf Speicher oder refrenceWie Gleichheitsoperator funktioniert, wenn ich eqality mit primitiven überprüfte?

Integer a=new Integer(5); 
    Integer b=a; 
    System.out.println(a==b); //true i know 
    /*case:1 */System.out.println(a==5); //true? why 

    /*case :2 */ System.out.println(a==new Integer(5)); // false ? why 
+0

Interessanter Hinweis ist, dass die Integer-Klasse einen Cache der Ganzzahl zwischen -128 und 127 behält. Wenn Sie also Sachen wie Ganzzahl a = 5; oder Integer.valueOf (5), Sie haben tatsächlich die gleiche Ganzzahl aus diesem Cache. In Ihrem Fall haben Sie den Konstruktor verwendet und dieser Cache wird nicht verwendet. Also, verschiedene Referenzen. – Thomas

Antwort

0

2 Für Fall basiert vergleichen, ist die Integer ein Auto-unboxed die primitive 5 ergibt, die bis 5.

Für Fall gleich ist 3 wird ein neues Integer-Objekt erzeugt, das eine andere Adresse hat als die Gleichheit, die nicht mit == überprüft werden kann. Sie würden die equals-Methode in diesem Fall benutzen müssen: (a.equals (new Integer (5)) wahr ist)

1

prüfen java doc für Integer https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

korrekter Weg, um Objekte zu vergleichen ist equals mit

public boolean equals(Object obj) 

Vergleicht dieses Objekt mit dem angegebenen Objekt. Das Ergebnis ist nur dann wahr, wenn das Argument nicht null ist und ein Integer-Objekt ist, das denselben int-Wert wie dieses Objekt enthält. Überschreibungen: entspricht in der Klasse Objekt Parameter: obj - das Objekt zum Vergleich. Rückgabe: true, wenn die Objekte identisch sind; sonst falsch.

Verwandte Themen