Fragen zur Java-Zertifizierung, Operatoren und Zuweisungen

Frage

Was ist die Ausgabe, wenn folgende Anweisungen ausgeführt werden?

Boolean b1 = new Boolean( true );
Boolean b2 = new Boolean( true );
Object obj1 = (Object)b1;
Object obj2 = (Object)b2;

if ( obj1 == obj2 )
  if ( obj1.equals(obj2) )     System.out.println( "a" );
  else
    System.out.println( "b" );
else
  if ( obj1.equals(obj2) )     System.out.println( "c" );
  else     System.out.println( "d" );
  1. a
  2. b
  3. c
  4. d

Die Ausgabe des Programms ist „c“, daher ist Antwort C korrekt. Da die Objektreferenz obj1 und obj2 nicht gleich sind, da sie auf verschiedene Boolean Objekte zeigen, kann die Ausgabe nicht „a“ oder „b“ sein. Da jedoch die equals() Methode den Wert (true) vergleicht, und beide Objekte den gleichen Wert haben, ist die Ausgabe „c“.

Frage

Analysiere die beiden Quellcodezeilen:

float f = 3.2;
int i = f;
  1. Dieses Programmstück wird nicht kompiliert
  2. Dieses Programmstück lässt sich kompiliert und i erhält der Wert 3
  3. Die zweite Zeile würde sich kompilieren lassen, wenn dort stände:

    int i = (byte) f;

  4. Die erste Zeile ließe sich kompilieren, wenn wir schreiben würden:

    float f = 3.2f;

Das Programm liefert beim Kompilieren eine Fehlermeldung, die besagt, dass der Datentyp float nicht mit double kompatibel ist. Der Datentyp double umfasst einen größeren Zahlenbereich und 3.2 ist als Literal automatisch ein double. Also ist A korrekt und B falsch. Der Fehler ist in der ersten Zeile ließe sich beheben, wenn man hinter dem 3.2 ein f hängt, wie es Lösung D vorschlägt. Somit ist D korrekt. Unabhängig von der erste Zeile ist auch mit der Typumwandlung auch die zweite Zeile richtig.

Frage

Welche der folgenden Anweisungen sind korrekt?

  1. 128 >> 1 ergibt 64
  2. 128 >>> 1 ergibt 64
  3. 128 >> 1 ergibt –64
  4. 128 >>> 1 ergibt –64

Antworten A und B sind korrekt.

Frage

Welche der folgenden Anweisungen ergeben den Rückgabewert true?

  1. „ulli“ == „ulli“
  2. „ulli“.equals(„ulli“)
  3. „ulli“ = „ulli“
  4. „ulli“.equals(new Button(„ulli“))

Da sich die virtuelle Maschine gleiche Strings in einem Konstanten-Pool hält, ist Antwort A korrekt. Bei B wird ein Zeichen-zu-Zeichen Vergleich unternommen. Da beide Strings identisch sind, ist auch hier das Ergebnis true, also ist auch Antwort B wahr. Man sollte sich nur bewusst sein, dass bei A kein inhaltlicher Vergleich stattfindet. Antwort C ergibt einen Compilerfehler, da ein einfaches Gleichheitszeichen eine Zuweisung definiert. Auf der linken Seite darf aber kein Literal stehen. Somit kann C nicht richtig sein. Die equals Methode, die auf der String Klasse definiert ist, überschreibt die equals() Methode der Klasse Object. Sie erlaubt aber als Parameter nur String Objekte. Es ist nicht so, dass bei nicht-Sting Objekten die toString() Methoden aufgerufen wird. Der Rückgabewert ist false. Also ist auch D falsch.

Frage

Welche der Anweisungen führt nicht zu einem Kompilierfehler?

  1. „ulli“ + “ plus “ + “ plus“
  2. „ulli“ + 29
  3. 345 + 45
  4. 5 + 5.5

Keine der Anweisungen führen zu einem Laufzeitfehler. Also sind Antwort A, B, C und D korrekt.

Frage

Welche der folgenden logischen Operatoren nennen sich „short circuit“?

  1. &
  2. ||
  3. &&
  4. |

B und C sind die kurzen Operatoren, die dann gelten, wenn der entsprechende Teil gilt.

Frage

Welchen Wert enthält die Variable temp nach der Ausführung der beiden Zeilen?

long temp = (int) 3.9;
temp %= 2;
  1. 0
  2. 1
  3. 2
  4. 3
  5. 4

Das Ergebnis ist 1, also die Antwort B wahr. Die Typumwandlung schneidet den Nachkommateil von 3.9 ab und das Ergebnis 3 Modulo 2 ist 1.

Frage

Welche Bildschirmausgabe erzeugt die folgende Anweisung?

System.out.println( 4 | 7 );

  1. 0
  2. 4
  3. 5
  4. 6
  5. 7

Die binäre Repräsentation der Zahl 4 ist 100 und von 7 ist 111. Beide mit Oder verknüpft gibt 111 und somit wiederum 7. Also ist Antwort E korrekt.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert