Я знаю, что если вы передадите тип Class в качестве параметра для метода, указатель будет передан, и если вы отредактируете параметр в методе, вы также отредактируете исходный экземпляр объекта, который вы передали (например, если метод с именем public void changeColor(Color color)
делает следующий код:
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]
), поэтому значение изменяется и указатель передается. С другой стороны, если вы используете значение типа int, которое является примитивом, вы получите другой результат:
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)
}
Будет ли i внутри класса A действовать также, как если бы он был частью указателя на A, или будет значение, если a.i в методе main не изменится после того, как я запущу changeA (a); Если нет, что я могу сделать, чтобы он изменился?