Java 2等于对象并更改其中一个

时间:2015-10-08 06:58:34

标签: java object

请你解释一下为什么会发生以下情况。 这种现象叫什么,我可以进一步查看 谢谢你:

Date d1=new Date();
Date d2=d1;
d1.setTime(d1.getTime()+60*60*1000);    // Changing d1 will automatically change d2. And visa versa.
System.out.println(d2);
System.out.println(d1);

int number1=7;
int number2=number1;
number1++;
System.out.println(number1+" "+number2); // Only number one is changed.

String str1="hiiiiii";
String str2=str1;
str1="hello";
System.out.println(str1+" "+str2);      //Only str1 is changed.

非常感谢

3 个答案:

答案 0 :(得分:1)

第一种情况: 由于d1和d2是对象引用并且它引用同一个对象,因此更改d1将自动更改d2。

第二种情况: number1number2是原始类型。因此,它会将number1的值复制到number2。所以只改变了第一名

第三种情况: 虽然str1str2都是对象,但直到第二行都指向相同的对象,但在第三行中,您将重新指定值str1。因此它将在池中创建一个str1将引用的新对象。

答案 1 :(得分:0)

面向对象编程中的不可变对象不变性

答案 2 :(得分:0)

好吧,如果您有一个“父”对象,例如d1,并将d2指定为d1的“子”对象,那么您所做的就是告诉JVM d2是d1。此时,JVM不区分D1和D2,因此对D2的任何更改也适用于D1。

但是在你的第三个例子中,你做了同样的事情,但是当你改变str11,这是一个“父”对象时,JVM并没有反映str22的变化,因为你没有告诉它这样做而且对str1的引用是不反映在str2上的原始引用。所以str1和2成为两个不同的对象。但是如果你再次改变了str2,它会反映出两者。