Java分配类值

时间:2019-04-17 08:28:12

标签: java class

这是一个简单的愚蠢问题,但我不知道,但是我该如何陈述这种情况。假设我有这样的课程

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类创建了一个对象)?

3 个答案:

答案 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)