一个类如何在没有原始类对象

时间:2016-02-13 21:06:55

标签: java class

请原谅我,我正在努力理解这个概念,不想在不知道发生了什么的情况下接受它。 我读到只有类X的对象可以修改自己,从下面的代码,Class 事实上,ModifyX可以通过调用setNum方法来更改X.x.num。

我的问题是:

为什么[ModifyX object" mx"]能够更改[X对象" x" ]价值超出X

作为参数传递的y的值在X中更改,但为什么在main(String[] args)中没有更改?

public class X {
    private int num;
    public void setNum(int num) {
        this.num = num;
    }

    public void getNum() {
        System.out.println("X is " + num);
    }

    public static void main(String[] arsgs) {
        int y = 10;

        X x = new X();
        x.setNum(y);   //sets the value of num in X to y;
        x.getNum();   // print the value of num in X

        ModifyX mx = new ModifyX();     // A new class that is inteded to modify X
        mx.changeX(x);                 //calls the set method of X with new Value 5
        x.getNum();                // returns the new Value passed in changeX instead of y

        System.out.println("Integer Y is not changed = " + y); // but y still remains the same
    }
}

class ModifyX {
    public void changeX(X num) {
        num.setNum(5); // changes  y to 5
    }
}

2 个答案:

答案 0 :(得分:2)

此方法

GetSavesPerTask

获取值s.setNum(y); 副本并将其传递给方法。 Java总是按值传递,因此它总是传递值的浅表副本。这意味着您可以更改此值的副本而不影响另一个。

此方法

y

相同
num.setNum(5);

所以这里改变了一个值num.num = 5; 的{​​{1}}字段。

您的本地变量numX num,并且此变量在任何地方都不会更改,因此没有理由相信它应该更改。

答案 1 :(得分:0)

所以'num'是X类的非公共成员,因此只有类本身才能直接修改它。但是,类X还提供了“公共”访问器函数“setNum”,这是一种方法,任何使用该类的人都可以使用它来“间接”设置属性'num'的值。