Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 1
  • 120

Odpowiedź (1)

  • 0

Wszystko zależy od tego, w jaki sposób utworzymy nasze obiekty. Wirtualna Maszyna Javy utrzymuje pulę Stringów w przeznaczonym do tego celu obszarze pamięci. Ma to wpływ na optymalizację czasu wykonania i ilość wykorzystywanej pamięci. Weźmy pod uwagę poniższy fragment kodu:

String s1 = “Hello”;
String s2 = “Hello”;
if(s1 == s2) { 
     System.out.println(“s1 == s2”);
}

Pierwsze wykorzystanie literału s1 spowoduje utworzenie nowego obiektu w puli. Z chwilą gdy wykonamy fragment kodu: "String s2 = “Hello”;", nie nastąpi utworzenie kolejnego obiektu, lecz przypisanie referencji s2 już utworzonego wcześniej obiektu z puli. Dochodzi do sytuacji, w której adres referencji s1 jest równy adresowi referencji s2. W efekcie warunek zwróci nam wartość "true".

 W poprzednim przykładzie wykorzystaliśmy literały do utworzenia naszych Stringów. Gdy jednak zastosujemy poniższą konstrukcję, okaże się, że wynik będzie całkiem odmienny:

String x1 = new String(“Goodbye”);
String x2 = new String(“Goodbye”);
if(x1 == x2) { 
     System.out.println(“x1 == x2”);
}

Otóż w chwili wykonania pierwszej linii tworzymy nowy obiekt w pamięci. W momencie, gdy wykonamy drugą linię, utworzymy kolejny obiekt w pamięci. Dochodzi do sytuacji, w której adres referencji x1 jest różny od adresu referencji x2. W efekcie warunek zwraca "false".

  • Odpowiedział
  • @ | 25.06.2013
  • TRENER ALTKOM AKADEMII