对象a =对象b; 对象a会发生什么?

gat*_*tor 11 java math

我的一位教授为考试提供了一些练习题,其中一个问题如下(伪代码):

a.setColor(blue);
b.setColor(red);
a = b;
b.setColor(purple);
b = a;
//what color is a, and what color is b?
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎非常简陋,所以我提出的答案是a是'红色',b是'红色',但我被告知这是不正确的.因为我的数学问题,我已经打破了我的答案:

a = 15;
b = 12;
a = b; //a becomes 12
b = 13;
b = a; //b becomes 12
Run Code Online (Sandbox Code Playgroud)

但我的思维过程是通过C语言,而不是Java.我认为两者都有一些通用的方法,但也许我错了?我的回答是错的还是我的教授错了?我是Java的新手,虽然我有一些C,Python和Web逻辑(PHP,Ruby)的命令,所以我很抱歉,如果这是微不足道的(它是).

Daw*_*ica 17

假设你已经创建了两个对象,并创建了变量ab引用它们,那么你最初得到的是这样的东西.

a -->  [ white ]     b --> [ white ]
Run Code Online (Sandbox Code Playgroud)

你的前两行改变了对象的颜色,给你

a -->  [ blue  ]     b --> [  red  ]
Run Code Online (Sandbox Code Playgroud)

然后,将变量a指向由引用的对象b,以便它们都引用同一对象.你现在有

       [ blue  ]     b --> [  red  ] <-- a
Run Code Online (Sandbox Code Playgroud)

然后更改引用的对象的颜色b.

       [ blue  ]     b --> [ purple ] <-- a
Run Code Online (Sandbox Code Playgroud)

最后,该行b=a;什么都不做,因为b已经引用了相同的对象a.


Yog*_*ngh 6

这是因为在第一个例子中,a并且b是对象,所以这就是每个步骤中发生的事情:

a < - 是一个对象

b < - 是一个对象

a.setColor(蓝色); < - a变成蓝色

b.setColor(红色); < - b变成红色

a = b; < - 重要 :: 原来的a对象被释放并进行垃圾回收和现在a持有的参考b对象,这意味着ab现在都是指同一个对象,它是b.

b.setColor(紫色); < - b现在是紫色的.由于只有b点,a也是紫色

:这两个ab紫色在这一点上.

  • 它将被垃圾收集 (5认同)