我试图更深入地学习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到底在做什么。谢谢