更改JAVA中重复对象的值

时间:2017-09-09 22:05:32

标签: java

我知道这个问题已被问过很多,但我无法弄清楚代码中的问题。

this.month = test.month;
this.day = test.day;
this.year = test.year;

为什么第一行输出:" 2004年7月3日" 和第二行:" 2004年1月3日" ?我希望他们输出" 2004年7月3日和#34;

我想我必须改变这些界限:

this.month = new DateTry(test.month); etc...

我看到了一些看似这样的答案,但对我不起作用:

{{1}}

3 个答案:

答案 0 :(得分:3)

  

为什么第一行输出:" 2004年7月3日"和第二行:" 2004年1月3日" ?我希望他们输出" 2004年7月3日和#34;

因为date1date2引用了两个不同的对象。您修改date1的状态:

date1.setMonth("July");

但你没有修改date2的状态。

想象一下,你有两张纸。你写了同样的文字"你好世界"对他们两个。然后你擦除Hello并在第一张纸上用Goodbye替换它。你在第二个上读到了什么? " Hello world",对吗?同样在这里。

  

我希望他们输出" 2004年7月3日和#34;

然后还修改date2的状态:

date2.setMonth("July");

如果您希望这两个变量引用同一个对象,则创建一个对象,并引用两个引用此唯一对象的变量:

DateTry date1 = new DateTry("January", 3, 2004);
DateTry date2 = date1;

答案 1 :(得分:0)

您只为date1设置Month,您也必须为date2设置它。 其他解决方案是在将date1设置为July后创建date2实例。

答案 2 :(得分:0)

您可以为String创建一个包装类来表示一个月,并为该委托创建一个月的更改:

DateTry date1 = new DateTry(new Month("January"), 3, 2004);
DateTry date2 = new DateTry(date1);
date1.setMonth("July");
System.out.println(date1.getDate());
System.out.println(date2.getDate());

public class Month {
    private String month;

    public Month(String month) {
        this.month = month;
    }

    public String getMonth() {
        return this.month;
    }

    public void setMonth(String month) {
        this.month = month;
    }
}

public class DateTry {

    public Month month;
    public int day, year;

    public DateTry(Month month, int day, int year) {
        this.month = month;
        this.day = day;
        this.year = year;
    }

    public DateTry (DateTry test) {
        this.month = test.month;
        this.day = test.day;
        this.year = test.year;
    }

    public String getDate() {
        return this.month.getMonth() + ", " + this.day + ", " + this.year;
    }

    public void setMonth(String month) {
        this.month.setMonth(month);
    }
}