Java Copy构造函数未按预期工作

时间:2015-09-15 14:23:07

标签: java copy-constructor

我正在学习Java,最近经历了Copy Constructor教程。我尝试编写Copy Constructor代码,但它会产生意外的输出。

问题是:

为什么第一个输出显示0null值?

以下是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

3 个答案:

答案 0 :(得分:5)

您必须从

更改复制构造函数逻辑
student6(student6 s)
{
i=s.id;
n=s.name;
}

student6(student6 s)
 {
    id=s.id;
    name=s.name;
 }

在显示方法中,您正在打印idname。所以你必须初始化它们才能看到结果。

请关注 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);

将打印in

的默认值

答案 2 :(得分:1)

在第一个构造函数中,您要设置字段idname,第二个构造函数设置字段in

当您同时打印两次时,您会打印未为第一个对象设置的in的值,因此它们分别为0null。< / 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();
    }
}