Zagadka ze Stringami
Stosunkowo prosta lecz ciekawa zagadka dotycząca klasy String
. Dlaczego po uruchomieniu poniższego kodu otrzymujemy:
<barista@javaczyherbata.pl> java StringPuzzle true false
Oto kod zagadki.
public class StringPuzzle { public static void main(String[] args) { new StringPuzzle().checkEquality(); } public void checkEquality() { String b1 = "Barista8"; String b2 = "Barista" + "8"; String b3 = "Barista" + b1.length(); System.out.println((b1 == b2) + " " + (b1 == b3)); } }
Powodzenia:)
daje poniższy rezultat
Jak widzimy drugi string został sklejony podczas kompilacji i zapisany w puli stringów (jest on identyczny ze stringiem pierwszym, więc tak naprawdę oba zostały zapisane na tej samej pozycji). Z kolei trzeci string został sklejony z wykorzystaniem
StringBuffera
. Całe wyrażenie zostało zamienione na newStringBuilder(String.valueOf("Barista")).append(b1.length()).toString()
co w wyniku daje nowy obiekt, stądfalse
podczas porównywania referencji.Potwierdzenie daje nam specyfikacja Javy,
"15.18.1. String Concatenation Operator +"
Dembol, marnujesz się w WP 😉
I w dodatku chcą Was sprzedać za 2/3 ceny ;P
Da się na tym portalu jakoś zalajkować wypowiedź? Chętnie bym to zrobił dla powyższego komentarza 😉