【发布时间】:2011-12-15 04:10:15
【问题描述】:
我知道,如果您将 Class 类型作为方法的参数传递,则指针将被传递,并且如果您在方法中编辑参数,您还将编辑您传递的原始对象实例(例如,如果一个名为 @987654322 的方法@ 执行以下代码:
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)
}
A 类中的 i 是否也会像它是 A 指针的一部分一样,或者如果 main 方法中的 a.i 在我运行 changeA(a) 后没有改变,值是否会改变?如果没有,我该怎么做才能改变它?
【问题讨论】:
-
这是错误的。传递给
changeColor()的color对象不会改变。你真的运行过你的代码吗? Java 按值传递引用。这意味着方法不能导致调用者的引用指向新的东西。
标签: java pointers parameters primitive