这是一个简单的愚蠢问题,但我不知道,但是我该如何陈述这种情况。假设我有这样的课程
public class MyClass
{
public int value1;
public void assignValue(int v1)
{
value1=v1;
}
public MyClass(int v1)
{
value1=v1;
}
public void write()
{
System.out.println("value1 :"+value1);
}
}
如果我这样运行我的程序
public class Program {
public static void main(String args[])
{
//first
MyClass c1 = new MyClass(10);
MyClass c2 = new MyClass(20);
c2 = c1;
c1.assignValue(15);
c1.write();
c2.write();
//but these are classes too.
Integer d1 = 10;//also Integer d1 = new Integer(10); same
Integer d2 = 20;
d2 = d1;
d1 = 15;
System.out.println(d1);
System.out.println(d2);
}
}
为什么c1和c2的值相等,为什么d1和d2不相等(我从Integer类创建了一个对象)?
答案 0 :(得分:2)
c2 = c1; // Both are pointing to same object
c1.AssignValue(15); // Value is being updated, not the actual reference.
现在,进入代码的第二部分。
d2 = d1; // Both are pointing to same object
d1 = 15; // Reference object has been updated
但是d2
仍指向旧对象。
答案 1 :(得分:1)
在c1.AssignValue(15);
中,您要更改的值不是对象引用,但是d1 = 15;
这将更改对象引用。
答案 2 :(得分:0)
当您执行{"result":0,
"items":[{"param1":value1_0,
"param2":value2_0},
{"param1":value1_1,
"param2":value2_1}
{"param1":value1_2,
"param2":value2_2}
]
}
时,您正在引用对象的引用。
当您进行c2 = c1;
时,您实际上是在进行d1 = 15;
。创建一个新对象,并由d1保存该对象的引用。 d2仍在引用旧对象(10)