我知道这个问题已被问过很多,但我无法弄清楚代码中的问题。
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}}
答案 0 :(得分:3)
为什么第一行输出:" 2004年7月3日"和第二行:" 2004年1月3日" ?我希望他们输出" 2004年7月3日和#34;
因为date1
和date2
引用了两个不同的对象。您修改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);
}
}