我的一位教授为考试提供了一些练习题,其中一个问题如下(伪代码):
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
假设你已经创建了两个对象,并创建了变量a
并b
引用它们,那么你最初得到的是这样的东西.
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
.
这是因为在第一个例子中,a
并且b
是对象,所以这就是每个步骤中发生的事情:
a < - 是一个对象
b < - 是一个对象
a.setColor(蓝色); < -
a
变成蓝色b.setColor(红色); < -
b
变成红色a = b; < - 重要 :: 原来的
a
对象被释放并进行垃圾回收和现在a
持有的参考b
对象,这意味着a
和b
现在都是指同一个对象,它是b
.b.setColor(紫色); < - b现在是紫色的.由于只有b点,a也是紫色
答:这两个a
和b
紫色在这一点上.
归档时间: |
|
查看次数: |
5705 次 |
最近记录: |