Java 的参数传递是相当棘手的——当一个对象被传递给一个函数时,你可以操作对象的字段但你不能操作对象本身。对象引用按值传递。所以,你可以说:
class someClass{
int i = 5;
}
class Foo
{
static void func(someClass c)
{
c.i = 3;
}
}
class MainClass{
public static void main(){
someClass c = new someClass();
System.out.println(c.i);
Foo.func(c);
System.out.println(c.i);
}
}
期望您的输出是:
5
3
对 c 字段的更改仍然存在。
但是如果操纵对象本身,这种操纵只会持续存在于Foo.func()
该函数中而不是外部:
class someClass{
int i = 5;
}
class Foo
{
static void func(someClass c)
{
c.i = new someClass();
c.i = 3;
System.out.println(c.i);
}
}
class MainClass{
public static void main(){
someClass c = new someClass();
System.out.println(c.i);
Foo.func(c);
System.out.println(c.i);
}
}
期望您的输出是:
5
3
5
发生了什么事?ci 在MainClass.main()
in 中的值为 5 Foo.func()
,c 本身被修改为指向 的另一个实例someClass
,包含值 3。但是,此更改不会反映到已传递的实际对象中。c
inFoo.func()
和现在是不同的MainClass.main()
对象。这就是为什么更改c
ofFoo.func()
不会影响c
in MainClass.main()
。