Cześć
Korzystam z poradnika 4prorammers dotyczącego "Przekazywanie parametru przez wartość i referencję" w odniesieniu do Javy.
Odnosząc się do tego zdania "Standardowo parametry funkcji (pod tym pojęciem rozumiem również metody w klasach) są przekazywane przez wartość. Czyli funkcja operuje na kopii zmiennej która została do niej przekazana." z wyżej wymienionego artykułu napisałem taki kod:
public class Testy4
{
public static void main(String[] args)
{
int x = -1;
foo(x);
System.out.println(x);
}
static void foo(int x)
{
x = 34;
System.out.println(x);
}
}
I wszystko się zgadza w odniesieniu do wyżej przytoczonego stwierdzenia - metoda
foo
bazuje na kopii zmiennej, pierwszy print to 34 a drugi to -1.
Ale już patrząc na ten kod tak nie jest:
Public class MyClass
{
public static void main(String[] args)
{
StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb);
StringBuilder sb2 = sb;
sb2.append(" World!");
System.out.println(sb);
}
}
Dlaczego tutaj metoda
append
użyta na zmiennej sb2
sprawia, że zmienna referencyjna <code class="java">sb
przyjmuje tutaj zainicjowaną wartość " World!"?
Czy chodzi o to, że przekazanie wartości przez wartość sprawia, że w metodzie działamy na kopii, a przekazanie przez referencje sprawia, że odnosimy się do bazowego obiektu?