Java 传递到方法中的对象是否需要返回以进行更改?
如果我将一个对象传递到一个方法中,并在该方法中更改该对象,它会保留其更改吗? 我不确定我的措辞是否正确,因此我将举一个例子:Java 传递到方法中的对象是否需要返回以进行更改?,java,oop,object,Java,Oop,Object,如果我将一个对象传递到一个方法中,并在该方法中更改该对象,它会保留其更改吗? 我不确定我的措辞是否正确,因此我将举一个例子: public void methodThatChangesX(ClassWithVariableX var) { var.x = 5; } ExampleClass var = new ExampleClass(); //ExampleClass's x's default is 6 methodThatChangesX(var); System.out.
public void methodThatChangesX(ClassWithVariableX var) {
var.x = 5;
}
ExampleClass var = new ExampleClass();
//ExampleClass's x's default is 6
methodThatChangesX(var);
System.out.println("x = " + var.x);
var的x是5还是6?有什么原因吗?该值将为5,但此行为仅适用于类类型。
如果您传递一个基元类型的参数(例如
int
),您将在方法内部处理一个副本
事实上,即使传入的类类型参数实际上也只是对同一对象的新引用,因此,如果您所说的不是var.x=something
,而是var=something
,则不会改变调用方的var
埃塔:一些关于那里真正发生的事情的深入解释:
如果您传递一个基元类型的参数(例如
int
),您将在方法内部处理一个副本
事实上,即使传入的类类型参数实际上也只是对同一对象的新引用,因此,如果您所说的不是var.x=something
,而是var=something
,则不会改变调用方的var
埃塔:一些关于那里真正发生的事情的深入解释:
的情况下,值将为5。虽然所有参数都是按值传递的,但是在的情况下,您怎么能说值是6呢?您自己说过,“传入的类类型参数实际上只是对同一对象的新引用”,在这种情况下,var.x
的值将随着您自身的传递而改变,因此答案是5。var.x
的值将是5。向下投票,因为这是一个错误的答案。我错误地理解了这个问题,认为5是“默认值”,6是新值,而实际上它被问到了另一个方向。很抱歉-现在编辑以更正数字。然而,答案中给出的解释是正确的。@hemflit我没有投反对票,但那6票确实引起了迅速的反应,因为答案确实具有误导性+1对于编辑Thank you@DimaMaligin,答案肯定是误导性的,你的反应是100%正确的。你怎么能说这个值是6?您自己说过,“传入的类类型参数实际上只是对同一对象的新引用”,在这种情况下,var.x
的值将随着您自身的传递而改变,因此答案是5。var.x
的值将是5。向下投票,因为这是一个错误的答案。我错误地理解了这个问题,认为5是“默认值”,6是新值,而实际上它被问到了另一个方向。很抱歉-现在编辑以更正数字。然而,答案中给出的解释是正确的。@hemflit我没有投反对票,但那6票确实引起了迅速的反应,因为答案确实具有误导性+1对于编辑Thank you@DimaMaligin,答案肯定是误导性的,你的反应是100%正确的。
public class Test {
public int i;
public Test(int i) {
this.i = i;
}
}
public static void changeAtrib(Test t) {
t.i = 0;
t = new Test(7);
}
Test test = new Test(5);
changeAtrib(test);