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

埃塔:一些关于那里真正发生的事情的深入解释:


该值为5,但此行为仅适用于类类型。
如果您传递一个基元类型的参数(例如
int
),您将在方法内部处理一个副本

事实上,即使传入的类类型参数实际上也只是对同一对象的新引用,因此,如果您所说的不是
var.x=something
,而是
var=something
,则不会改变调用方的
var

埃塔:一些关于那里真正发生的事情的深入解释:


该值将为5。尽管所有参数都是按值传递的,但在
的情况下,值将为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);