Я знаю, что если вы передадите тип класса в качестве параметра для метода, указатель будет передан, и если вы отредактируете параметр в методе, вы также отредактируете исходный экземпляр объекта, который вы передали (для например, если метод с именем public void changeColor(Color color)
делает следующий код:Java-примитивы при передаче параметров класса class
public void changeColor(Color color)
{
color = new Color(20, 100, 50);
}
и вы назвали значение, как так:
Color color = new Color(10, 20, 30);
System.out.println(color.toString());
changeColor(color);
System.out.println(color.toString());
обе строки консоли должны отличаться друг от друга (java.awt.Color[r=10,g=20,b=30]
и java.awt.Color[r=20,g=100,b=50]
), таким образом, значение я s изменено и указатель передан. С другой стороны, если вы используете целочисленное значение, которое является примитивным, вы получите другой результат:
public void changeNumber(int i)
{
i = 10;
}
и вы назвали значение, как так:
int n = 5;
System.out.println(n);
changeNumber(n);
System.out.println(n);
консоль не печатает 5
и 10
, но на обеих линиях указано 5
. С учетом сказанного, если бы я имел это:
public class A
{
public int i;
public Color c;
public A(int n, Color color)
{
i = n;
c = color;
}
}
И в работоспособный классе ...
public static void main(String[] args)
{
A a = new A(10, new Color(10, 40, 23));
changeA(a);
}
public static changeA(A varA)
{
varA.i = 54;
varA.c = new Color(40, 30, 264)
}
Будет ли я внутри класса и действовать, как если бы он был частью указателя А или будет ли значение, если ai в основном методе не изменится после запуска changeA (a); Если нет, что я могу сделать, это изменится?
Начать здесь: http://stackoverflow.com/questions/8263446/how-to-verify-call-by-value-of-java –
Это неправильно. Объект 'color', переданный' changeColor() ', не изменится. Вы действительно запустили свой код? Java передает ссылки по значению. Это означает, что метод не может заставить ссылку звонящего указывать на что-то новое. – erickson