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。但是,此更改不会反映到已传递的实际对象中。cinFoo.func()和现在是不同的MainClass.main()对象。这就是为什么更改cofFoo.func()不会影响cin MainClass.main()。