请你解释一下为什么会发生以下情况。 这种现象叫什么,我可以进一步查看 谢谢你:
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.
非常感谢
答案 0 :(得分:1)
第一种情况: 由于d1和d2是对象引用并且它引用同一个对象,因此更改d1将自动更改d2。
第二种情况:
number1
和number2
是原始类型。因此,它会将number1
的值复制到number2
。所以只改变了第一名
第三种情况:
虽然str1
和str2
都是对象,但直到第二行都指向相同的对象,但在第三行中,您将重新指定值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,它会反映出两者。