2016-07-24 11 views
0

Ich habe versucht zu sehen, was für einige Java-Typen wahre Tabelle ist.Java Type, Wertvergleich

Und ich kann nicht verstehen, wie Top Eins wahr und Eins unter False zurückgibt?

public class CompareTypes{ 

    public static void main(String[] args){ 

     // ------------------------------------- 
     Integer AA = 12; 
     Integer BB = 12; 
     System.out.println(AA == BB); // true 

     // ------------------------------------- 
     Integer a = 128; 
     Integer b = 128; 
     System.out.println(a == b); // false 


    } 

} 

Antwort

1

Sie sehen ein Artefakt von Autoboxing.

Integer Objekte haben unterschiedliche Objekt-IDs, was bedeutet, dass zwei verschiedene Integer Objekte false für == sind. Die Methode valueOf speichert jedoch die ersten 127 Werte des Objekts Integer zwischen. Wenn Sie einen Integer zwischen -128 und +127 erstellen, erhalten Sie über seine valueOf statische Fabrik das exakt gleiche Objekt. Wenn Sie einen mit einem Wert> = 128 erstellen, erhalten Sie jedes Mal ein ganz neues Objekt mit einer anderen ID und reagieren nicht intuitiv auf den Aufruf ==.

Autoboxing verwendet die valueOf Methode, um die Autoboxing zu tun, weshalb die Objektreferenzen als Integer Objekte aus int Literalen erstellt weniger als 128 Arbeiten. Die Linien, die zwei Integer Objekte des Werts 128 erzeugen, erzeugen jedoch zwei verschiedene Objekte.

Die Moral der Geschichte ist

  • try .equals() für Werttypen
  • wörtliche Arten von Vermischung und geboxt Arten Vorsicht zu verwenden.

https://blogs.oracle.com/darcy/entry/boxing_and_caches_integer_valueof