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ądfalsepodczas 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 😉