您好我是Java的新手,请任何人解释以下代码。我用Date类型替换了int,但是d1值没有改变。但是为什么日期只会改变,以及setYear(100)如何打印为2000.
year A B C D
1990 0 0 1 0
1991 0 1 1 0
1992 0 0 0 1
1993 1 1 0 0
d1是1999年12月31日星期五00:00:00 GMT d2是太阳12月31日00:00:00 GMT 2000
答案 0 :(得分:0)
Java是按值引用的。这意味着d1
方法中的d2
和changeDate
Date对象与main
方法中使用的对象不同,因为它们是特定于方法的(它们已创建)在方法中,而不是在它之外)。
要解决此问题,您可以将d1
和d2
声明为类范围的变量,并使用它们代替方法中的日期对象。
答案 1 :(得分:0)
d1.setYear(100);
通过引用直接引用对象。即使在参数中传递了引用的副本,它仍然可以访问该对象。
方法setYear()
会将Date
对象的年份更改为 1900 +参数
这就是d1.setYear(100)
2000(1900 + 100)
为什么d2仍然指的是同一个对象?
因为在你的changeDate方法中,只更改了引用的副本,而不是原来的副本。
答案 2 :(得分:-2)
您已声明对象 d1 :
两次 Date d1 = new Date(99,11,31);
Date d1 = new Date(99,11,31);
也许第二个Date对象应该是d2。