Java:对象字段分配
我试图理解一些可能非常简单的事情,所以如果我看起来像个菜鸟,我道歉 我有一个java类:Java:对象字段分配,java,Java,我试图理解一些可能非常简单的事情,所以如果我看起来像个菜鸟,我道歉 我有一个java类: public class Student { public String name = ""; public int age = 0; public String major = "Undeclared"; public boolean fulltime = true; public void display() { System.out.print
public class Student {
public String name = "";
public int age = 0;
public String major = "Undeclared";
public boolean fulltime = true;
public void display() {
System.out.println("Name: " + name + " Major: " + major);
}
public boolean isFullTime() {
return fulltime;
}
}
这节课我称之为第一节课:
public class TestStudent {
public static void main(String[] args) {
Student bob = new Student();
Student jian = new Student();
bob.name = "Bob";
bob.age = 19;
jian = bob;
jian.name = "Jian";
System.out.println("Bob s Name: " + bob.name);
}
}
这将打印:
鲍勃的名字:简
我很好奇那里的作业是如何完成的。这一行导致
jian
和bob
指向相同的对象:
jian = bob;
因此,更改jian
名称也将更改bob
名称
jian.name = "Jian";
执行
Student bob=new Student()
操作时,您正在创建Student类的实例,并将对该位置的引用保存在bob
变量的内存中
当您执行
jian=bob
操作时,您正在将相同的引用保存到jian
变量中的内存位置,因此,现在jian
和bob
指向完全相同的学生类实例。jian
引用了bob
对象。您正在将bob的引用复制到jian
现在两个都指向同一个对象。这是由于线条的缘故
jian = bob;
通过这一行,您将Jian对象的实例替换为Bob的对象。
这意味着Jian实例变成了Bob实例,但Bob实例仍然存在
因此,当您更改Jian的名称时,您在内部更改Bob的名称,正如前面所写,您的变量Bob和Jian链接到内存中的同一个对象。也就是说,对于非原语类型,当您使用=运算符时,您可以复制链接。如果需要创建另一个对象,该对象将包含以前输入数据的字段,则需要实现克隆方法。或者,您可以添加构造函数来获取参数中的对象并复制字段。 例如: 建造商:
public Student(Strudent obj){
this.name = obj.name;
this.age = obj.age;
}
大体上:
学生简=新生(鲍勃)
你可以找到很多解决问题的方法。使用任何你喜欢的变体。因为
bob
和jian
指的是同一个对象。谢谢大家的回答,我对他们都投了赞成票,因为他们是对的。我选择了@AnthonyGrist的答案,因为它更清晰。再次感谢!非常感谢,这是一个很好的答案,我投了更高的票
jian = bob.clone();
public Student(Strudent obj){
this.name = obj.name;
this.age = obj.age;
}