Jak przekazywane są obiekty w Javie?

Jak przekazywane są obiekty w Javie?
0

Jak przekazywane są obiekty w Javie? Jak powinno się odpowiedzieć na to pytanie? Czy odpowiedź przez wartość jest prawidłowa? Co powiedzieć więcej na ten temat.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:14 minut
1

Referencje są przekazywane przez wartość. Obiekty są przekazywane i obsługiwane zawsze przez referencje.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
DE
http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value - w celu uzupełnienia Jeżeli ktoś woli łatwiejsze porówniania to polecam trzeci (chyba?) rozdział książki Head First Java.
0

Odpowiedź przez wartość jest prawidłowa, należy mieć na uwadzę to, że przy przekazywaniu obiektu przez metode, jest tworzona kopia tego obiektu(więc przekazywanie przez wartość), lecz w niektórych przypadkach(np. kolekcje) istnieje możliwość modyfikacji tej kolekcji poprzez skopiowany obiekt.

edytowany 1x, ostatnio: bogdans
DE
" należy mieć na uwadzę to, że przy przekazywaniu obiektu przez metode, jest tworzona kopia tego obiektu" jaka kopia?
Sarrus
Bzdury wasz mość gadasz. To Java to nie C++
RA
bulshit, mozna zmieniać własciwości obiektu w metodzie przez referencję
xfin
Tę bzdurę moderator powinien jak najprędzej usunąć :P
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Przekazywana jest wartość referencji a referencja to adres obiektu w pamięci
To podobne to tego jakbyś przekazywał pojedyńczy wskaźnik w C/C++


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:12 miesięcy
  • Postów:1788
0
Kopiuj
public class Main {
  public static void main(String[] args) {
    int val = 5;
    int[] arr = new int[]{5};

    passByValue(val);
    passByReference(arr);
      
    System.out.println(val);
    System.out.println(arr[0]);
    // 5
	// 10
  }

  public static void passByValue(int val) {
    val += 5;
  }

  public static void passByReference(int[] obj) {
    obj[0] += 5;
  }
}
edytowany 2x, ostatnio: Desu
Sarrus
  • Rejestracja:około 14 lat
  • Ostatnio:4 dni
  • Postów:2512
0

Referencje są przekazywane przez wartość. Obiekty są przekazywane i obsługiwane zawsze przez referencje.

Czyli załóżmy że mamy dwie metody:

Kopiuj
void func1(Foo foo)
{
   foo.setValue(6);
}

void func2(Foo foo)
{
   foo = new Foo();
   foo.setValue(6);
}

I wywołując je w ten sposób:

Kopiuj
Foo foo = new Foo();
foo.setValue(5);
func1(foo);
foo.getValue(); //6

foo.setValue(5);
func2(foo);
foo.getValue(); //5

powinieneś już widzieć różnicę.

edytowany 1x, ostatnio: Sarrus
JavaDevv
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:24

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.