我正在学习Java,最近经历了Copy Constructor教程。我尝试编写Copy Constructor代码,但它会产生意外的输出。
问题是:
为什么第一个输出显示0
和null
值?
以下是Copy Constructor的对象:
class student6 {
int id;
String name;
int i;
String n;
student6(int a, String b) {
id = a;
name = b;
}
student6(student6 s) {
i = s.id;
n = s.name;
}
void display() {
System.out.println(i + "..." + n);
}
public static void main(String args[]) {
student6 s1 = new student6(11, "Suresh");
student6 s2 = new student6(s1);
s1.display();
s2.display();
}
}
输出
0...null
11...Suresh
答案 0 :(得分:5)
您必须从
更改复制构造函数逻辑student6(student6 s)
{
i=s.id;
n=s.name;
}
到
student6(student6 s)
{
id=s.id;
name=s.name;
}
在显示方法中,您正在打印id
和name
。所以你必须初始化它们才能看到结果。
请关注 Java naming conventions
。班级名称以大写字母开头。 student6
应为Student6
P.S:感谢您打印我的名字;)
答案 1 :(得分:2)
s1
仅初始化int id;
和String name;
:此行
student6 s1 = new student6(11, "Suresh");
调用第一个构造函数
student6(int a, String b) {
id = a;
name = b;
}
所以,请致电
System.out.println(i + "..." + n);
将打印i
和n
答案 2 :(得分:1)
在第一个构造函数中,您要设置字段id
和name
,第二个构造函数设置字段i
和n
。
当您同时打印两次时,您会打印未为第一个对象设置的i
和n
的值,因此它们分别为0
和null
。< / p>
这是一个修改,导致我相信你期望的输出。
class student6 {
int id;
String name;
student6(int a, String b) {
id = a;
name = b;
}
student6(student6 s) {
id = s.id;
name = s.name;
}
void display() {
System.out.println(id + "..." + name);
}
public static void main(String args[]) {
student6 s1 = new student6(11, "Suresh");
student6 s2 = new student6(s1);
s1.display();
s2.display();
}
}