2013-02-09 9 views
5

mein Code:warum zwei Objekte der Klasse Integer in Java kann nicht gleich sein

public class Box 
{ 
    public static void main(String[] args) 
    { 
    Integer z = new Integer(43); 
    z++; 

    Integer h = new Integer(44); 

    System.out.println("z == h -> " + (h == z)); 
    } 
} 

Ausgang: -

z == h -> false 

warum die Ausgabe falsch ist, wenn die Werte der beiden Objekte gleich ist?

Gibt es eine andere Möglichkeit, wie wir die Objekte gleich machen können?

Antwort

1

Sie versuchen, zwei verschiedene Objekte und nicht ihre Werte zu vergleichen. z und h zeigen auf zwei verschiedene Integer-Objekte, die denselben Wert haben.

z == h 

prüft, ob zwei Objekte gleich sind. Also wird es falsch zurückgeben.

Wenn Sie die Werte, die mit dem Integer-Objekt gespeichert wurden, vergleichen möchten, verwenden Sie die Methode equals.


Integer z = new Integer(43); // Object1 is created with value as 43. 
z++;       // Now object1 holds 44. 

Integer h = new Integer(44); // Object2 is created with value as 44. 

So am Ende haben wir zwei verschiedene Integer-Objekt, dh object1 und object2 mit Wert als 44. Jetzt

z = h 

Dies wird überprüfen, ob Objekte von z und h gezeigt wird, gleiche . dh object1 == object2 was falsch ist. Wenn Sie

Integer z = new Integer(43); // Object1 is created with value as 43. 
z++;       // Now object1 holds 44. Z pointing to Object1 

Integer h = z;     // Now h is pointing to same object as z. 

z == h 

wird nun tun return true.

könnte Diese http://www.programmerinterview.com/index.php/java-questions/java-whats-the-difference-between-equals-and/ helfen diese

+0

Ich habe gelernt, dass == überprüft, ob die Gleichheit der Referenzen des Objekts gleich ist. Kannst du mir sagen, wie ich die Referenzen in diesem Fall gleich machen kann? –

+0

@HimanshuAggarwal: Die Referenz ist gleich, wenn beide Referenzvariablen auf dasselbe Objekt zeigen. Sie möchten Werte oder Referenzen vergleichen? – xyz

+1

@HimanshuAgargarwal: Ich habe meine Antwort aktualisiert, um es klarer zu machen. – xyz

2

Integer ist Objekt nicht primitiv (int) Und Object equality vergleichen mit equals Methode.

Wenn Sie z == h tun wird es nicht in int Wert unbox es sei denn, es sowohl Integer Referenz (z & h) prüft beziehen sich gleiche Bezugs oder nicht.

Wie es in documentation abgeleitet ist -

Das Ergebnis ist wahr, wenn und nur wenn das Argument nicht null ist, und ist ein Integer-Objekt, das den gleichen Wert wie das int-Objekt enthält.

System.out.println("z == h -> " + h.equals(z)); 

Es wird true drucken.

+1

@ downvoter - Sorge für einen Kommentar sonst ist es unethisch. –

6

Nein. Verwenden Sie h.equals(z) anstelle von h == z, um das von Ihnen erwartete Gleichheitsverhalten zu erhalten.

0

Überprüfen Sie, ob Sie z ++ für das Integer-Objekt verwenden können.

+0

Ja, es kann gemacht werden. Das nennt man Unboxing Integer zu einem int. –

+0

ja. Wir können das Objekt dieser Wrapper-Klasse inkrementieren –

+0

in Ordnung, es ist eine Weile her, seit ich Java benutzt habe, ich weiß, dass es mit einem Int gemacht werden kann. – ecsit39

1

Ganzzahl ist ein Objekt, kein primitiv. Wenn z & h Primitive wären, würde == gut funktionieren. Beim Umgang mit Objekten prüft der Operator == nicht auf Gleichheit; Es prüft, ob die beiden Referenzen auf das gleiche Objekt zeigen.

Verwenden Sie als solche z.equals(h); oder h.equals(z); Diese sollten True zurückgeben.

+0

Also in diesem Fall, wie können wir die Referenzen auf das gleiche Objekt zeigen? –

+1

Sie können sie auf das gleiche Objekt zeigen mit 'h = z;' –

3

h == z nur funktionieren würde, wenn Sie den Wert über Auto-Boxen zuweisen (dh Integer a = 43) und der Wert zwischen -128 und 127 (im Cache gespeicherten Werte), dh:

Integer a = 44; 
Integer b = 44; 

System.out.println("a == b -> " + (a == b)); 

OUTPUT:

a == b -> true 

Wenn der Wert außerhalb des Bereichs ist [-128, 127], dann gibt es false

Integer a = 1000; 
Integer b = 1000; 

System.out.println("a == b -> " + (a == b)); 

OUTPUT:

a == b -> false 

jedoch der richtige Weg, um zwei Objekte zu vergleichen ist Integer.equals() Methode zu verwenden.

Verwandte Themen