Wpis z mikrobloga

Mam pytanie dlaczego w tym programowanie wynikiem jest 2 a nie 5? Czy jeden obiekt klasy to jedno miejsce w pamięci i obie zmienne odwołują się do tego samego miejsca?

public class Klasa{
public int zm;
public static void main(String args[]) {
Klasa a,b;
a = new Klasa();
b = a;
a.zm = 5;
b.zm = 2;
System.out.println(a.zm);
}
}

#programowanie #java
  • 6
  • Odpowiedz
stworzyłeś jeden obiekt, czyli zarezerwowałeś jedno miejsce w pamięci. a pokazuje na to samo miejsce w pamięci co b. bo a=b nie robi kopii obiektu, a kopię "wskaźnika", "referencji" czy jak to się tam w javie nazywa.
  • Odpowiedz
@Qarez: może trochę nie na temat teraz, ale deklarowanie zmiennych "na wyrost" bez ich inicjalizacji:

Klasa a,b;
nie jest dobrą praktyką w Javie - to jakaś naleciałość niektórych "nauczycieli programowania" z czasów Turbo Pascala gdzie blok zmiennych deklarowało się przed ciałem procedury (pic rel).

W formie jak niżej:

Klasa a = new Klasa();
Klasa b = a;
od razu będzie widać odkąd zmienna zaczyna żyć. W kilku linijkach oczywiście to nie
PaaD - @Qarez: może trochę nie na temat teraz, ale deklarowanie zmiennych "na wyrost"...

źródło: comment_1655972857D2V6laaPuj33UtqB8RntSN.jpg

Pobierz
  • Odpowiedz