Źródło: Arkusze CKE
Jaki będzie wynik działania poniższego kodu w języku Java?
String a = "hello";
String b = "hello";
String c = new String("hello");
System.out.println(a == b);
System.out.println(a == c);
System.out.println(a.equals(c));
Warianty odpowiedzi
-
A
true, true, true
-
B
true, false, true
-
C
true, false, false
-
D
false, false, true
Wyjaśnienie
W Javie operator == porównuje referencje (adresy w pamięci), a metoda equals sprawdza faktyczną zawartość obiektów.
Zmienne a oraz b powstały jako literały, więc Java umieszcza je w tak zwanej puli stringów i kieruje obie zmienne na ten sam obiekt w pamięci. Dlatego a == b daje true.
Zmienna c powstała przy użyciu operatora new, co zmusza środowisko do utworzenia nowego, osobnego obiektu na stercie. Adresy są różne, więc a == c daje false.
Na koniec metoda equals porównuje sam tekst, a ponieważ w obu przypadkach jest to hello, otrzymujemy true.