Java如何处理构造函数中的当前(此)对象引用?

时间:2019-07-15 20:27:46

标签: java

我试图更深入地学习Java,所以从基础知识重新开始,现在我试图获取有关Java编译器和Java对象管理的更多详细信息。

首先,我尝试创建一个Player的简单bean,如下所示


public class Player {
    private String name;

    public Player() {
        this.name = new String("mahrez");
    }

    public Player(Player p) {
        this.name = p.getName();
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
    // hashcode and equals ...
}

然后尝试玩这个简单的代码,看看我是否在对象引用和值突变方面变得很好

        Player mahrez = new Player();

        Player[] players = new Player[10];

        for (int i = 0; i < players.length; i++) {
            players[i] = mahrez;
        }

        System.out.println(Arrays.deepToString(players)); // should print 10 mahrezes

        players[0].setName("Taleb");

        System.out.println(Arrays.deepToString(players)); // should print 10 Talebs

        System.out.println("///////// new  experiments ///////////");
        players[0].setName("mahrez");

        for (int i = 0; i < players.length; i++) {
            players[i] = new Player(mahrez);
        }

        System.out.println(Arrays.deepToString(players)); // should print 10 mahrezes

        players[0].setName("Taleb");

        System.out.println(Arrays.deepToString(players)); // should print 1 Taleb

然后我有了调整我的构造函数的想法,以便了解是否可以将对象引用p传递给this对象引用,但是我对编译错误感到惊讶

  

作业的左侧必须是变量

所以我在这里迷失了一点:为什么players[i] = mahrez;this = p不同,为什么players[i]this从构造函数中看到的相同?

经过调整的构造函数:

    public Player(Player p) {
        this = p;
    }

以另一种方式,p和同类型引用不是吗?我想了解在这种情况下编译器和Java到底在做什么。谢谢

0 个答案:

没有答案