我想要了解一些可能非常简单的事情,所以如果我看起来像个菜鸟,我会道歉。
我有这个java类:
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);
}
}
这将打印:
Bob的名字:Jian
我很好奇如何在那里完成作业。
答案 0 :(得分:3)
此行会导致jian
和bob
指向相同的对象:
jian = bob;
因此更改jian
名称也会更改bob
名称。
jian.name = "Jian";
答案 1 :(得分:2)
执行Student bob = new Student()
时,您正在创建Student类的实例,并在bob
变量的内存中保存对该位置的引用。
当您执行jian = bob
时,您将jian
变量中的内存位置保存为相同的引用,因此现在jian
和bob
指向完全相同的Student类实例。
答案 2 :(得分:2)
Student bob = new Student();
Student jian = new Student();
// you've created two objects and two references
bob.name = "Bob"; // bob's name is now Bob
bob.age = 19; // bob's age is now 19
jian = bob; // the jian reference is now referring to the same object as bob
jian.name = "Jian"; // jian and bob are now referring to an object whose name is changed to Jian
System.out.println("Bob s Name: " + bob.name);
答案 3 :(得分:2)
Jian
引用了bob
对象。
答案 4 :(得分:2)
你正在将bob的引用复制到jian。
现在两者都指向同一个对象。
答案 5 :(得分:2)
由于行
而分配jian = bob;
使用此行,您可以使用Bob的Object替换Jian的Object实例。 这意味着Jian实例成为Bob实例,但Bob实例保持存在。
因此,当您更改Jian的名称时,在内部更改Bob的名称
答案 6 :(得分:1)
如前所述,你的变量bob和jian链接到内存中的同一个对象。也就是说,当你使用=运算符时,对于非原始类型,你可以复制链接。如果您需要创建包含先前输入数据的字段的anoter对象,则需要实现克隆方法。或者,您可以添加构造函数,将对象放入参数中并复制字段。 例如:
jian = bob.clone();
构造函数:
public Student(Strudent obj){
this.name = obj.name;
this.age = obj.age;
}
主要: 学生jian =新学生(bob);
你可以找到解决问题的许多变种。使用您喜欢的任何变体。