class Ideone
{
int x;
public static void main (String[] args) throws java.lang.Exception
{
Ideone i;
i = new Ideone();
i.x = 25;
System.out.println(i.x);
f(i);
System.out.println(i.x);
g(i);
System.out.println(i.x);
}
public static void f(Ideone j){
j = new Ideone();
j.x = 55; // It just changes new instance of J. It is not changing actual object
}
public static void j(Ideone j){
j.x = 52; // It modifies actual object
}
}
我对此有疑问。在j函数的情况下,它修改实际对象。是不是通过参考传递?我们正在传递对象并在j中修改它。
但我也在功能f中做同样的事情。传递对象并进行修改。但它并没有修改原始对象。
我对这些之间的行为感到困惑。
根据高度评价的answer,我在两种情况下都传递了一个网址。我正在修改URL中的内容。但是在一个案例中所有人都可以看到它,但在另一个案例中则不然。
答案 0 :(得分:2)
f
方法会覆盖传递给它的引用j
。因此,它无法更改从调用方传递给它的Ideone
实例的状态。请注意,赋值j = new Ideone()
不会影响f
的调用者,因为Java传递了引用变量的值,而不是对它的引用。
j
方法不会覆盖引用,因此可以修改引用的实例的状态。