以下程序是什么?

时间:2016-01-07 14:08:35

标签: java

    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中的内容。但是在一个案例中所有人都可以看到它,但在另一个案例中则不然。

1 个答案:

答案 0 :(得分:2)

f方法会覆盖传递给它的引用j。因此,它无法更改从调用方传递给它的Ideone实例的状态。请注意,赋值j = new Ideone()不会影响f的调用者,因为Java传递了引用变量的值,而不是对它的引用。

j方法不会覆盖引用,因此可以修改引用的实例的状态。