Frage

Ich war einer dieser Online-Java-Tests zu tun, und ich wurde diese Frage gestellt:

Frage: Geben Sie korrekte Zuordnung:

Long l = 1; 
Double d = 1;
Integer i = 1;
String s = 1;
Object o = "1";
System.out.println(o);
o = 1;
System.out.println(o);

Bitte versuchen Sie sich, bevor Sie weiter gehen.

Nun, ich kann Ihnen sagen, dass ich es falsch, untersuchte ich es und gefunden:

//Long l = 1; //cannot widen and then box
Long ll = 1L;//no need to widen, just box
//Double d = 1;//cannot widen and then box
Double dd = 1d;//no need to widen, just box
Integer i = 1;//no need to widen, just box
//String s = 1;//cannot do implicit casting here

Object o = "1";//this compiles and is just plain weird 
System.out.println(o);//output is 1
o = 1;//this also compiles and is also weird 
System.out.println(o);//output is 1

Kann jemand sagen, warum:

Object o = 1; und Object o = "1";

Kompilierung und Ausgang 1 in beiden Fällen, das ist mir rätselhaft.

Vielen Dank

War es hilfreich?

Lösung

"1" ist eine Instanz der Klasse String und String ist eine Unterklasse von Object-Klasse in Java (wie jede andere Klasse). 1 wird in eine Ganzzahl eingerahmt, die ebenfalls vom Objekt abgeleitet wird.

Andere Tipps

Da "1" ist eine Instanz eines String, und seit 1.5 1 ist auto-boxable zu einem Integer; Beide Typen sind Subtypen von Object. Vor dem Autoboxing eingeführt wurde, würde Object o = 1; nicht kompiliert werden.

Um das Beste aus dieser Lernerfahrung zu erhalten, sollten Sie von Object der getClass() Methode bewusst sein. Durch die Zugabe von System.out.println(o.getClass().getName()), können Sie auch den Namen der Klasse drucken, dass das Objekt bezeichnet durch o gehört. In Ihrem Fall sind sie java.lang.String (für (Object) "1") und java.lang.Integer (für (Object) 1).

Nur für den Abschluss, sollte ich erwähnen, dass Sie jetzt auch Object o = false; tun.

Nun, der erste Fall „1“ ist ein String wörtliche, so eine Unterklasse des Objekts, damit es belegbar. Als eine Zeichenkette ist es Leistung von 1 relativ einfach.

Im zweiten Fall, Auto-Box auftritt. Integer ist eine Unterklasse des Objekts, daher zuordenbar es. In ähnlicher Weise macht die Ausgabe von 1 dann durchaus Sinn.

Das ist, weil o vom Typ Object ist. Jedes Objekt, in Java, erweitert die Klasse Object. Also ... wenn Sie Object o = 1 sagen, wandelt es 1 von int zu Integer, was ein Object ist. In ähnlicher Weise „1“ ist eine, die ein String Object ist. die System.out.printlns Object Methode In beiden Fällen ruft Object auf einem toString Aufruf. In beiden Fällen wird es 1 gedruckt werden.

Sie können setzen Object o = anything; wo anything ist jedes Objekt, da alle Klassen aus der Object-Klasse abgeleitet. Es arbeitet mit Primitiven wegen Autoboxing-Funktion, die 1,5 in Java kam.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top