0 szavazat
(4,8e pont) által 
által újranyitott

Mindig azt gondoltam, hogy a JAVA referencia szerint vesz át változókat.

De láttam, néhány blog posztot, ami azt írja, hogy ez nem így van. Például

Nem hiszem, hogy értem a különbséget.

Mi a magyarázat?

1 válasz

0 szavazat
(4,8e pont) által 
 
Legjobb válasz

Java mindig érték szerint vesz át vagyis pass-by-value.
Viszont, amikor egy objektumot értéket adunk, egy referenciát adunk hozzá. Ez zavaros lehet egy kezdőnek.

Valami ilyesmi:

public static void main(String[] args) {
    Dog aDog = new Dog("Max");
    Dog oldDog = aDog;

    // az objektumot a foo() függvénynek adjuk
    foo(aDog);
    // aDog változó még mindig a "Max" Dog objektumra mutat, amikor a foo() visszatér
    aDog.getName().equals("Max"); // true
    aDog.getName().equals("Fifi"); // false
    aDog == oldDog; // true
}

public static void foo(Dog d) {
    d.getName().equals("Max"); // true
    // d megváltoztatása a foo()-n belül, hogy egy új "Fifi" Dog objektumra mutasson
    d = new Dog("Fifi");
    d.getName().equals("Fifi"); // true
}

Szintén:

public static void main(String[] args) {
    Dog aDog = new Dog("Max");
    Dog oldDog = aDog;

    foo(aDog);
    // amikor a foo() visszatér, a kutya neve megváltozott "Fifi"-re
    aDog.getName().equals("Fifi"); // true
    // de még mindig ugyanaz a kutya
    aDog == oldDog; // true
}

public static void foo(Dog d) {
    d.getName().equals("Max"); // true
    // ez a d nevét átállítja "Fifi"-re
    d.setName("Fifi");
}
...