当您运行以下代码时,bike1的齿轮值将更改为3以及bike2。你能解释一下原因吗? 我自己的猜测是因为bike1和bike2是对象变量,实际上并不包含任何值,它们只是引用(标签)。当他们被分配到彼此相等时他们都变成3.我是对的吗?
class Bicycle{
int gear = 0;
void changeGear(){
gear = 3;
}
}
public class BicycleApp {
public static void main(String[] args) {
//Create bike 1
Bicycle bike1 = new Bicycle();
System.out.println(bike1.gear);
//Create bike 2
Bicycle bike2 = bike1;
System.out.println(bike1.gear);
//Call the method
bike2.changeGear();
System.out.println(bike2.gear);
System.out.println(bike1.gear);
}
}
答案 0 :(得分:3)
下面:
Bicycle bike2 = bike1;
您指的是bike2对象与bike1相同的参考,然后您更改齿轮。所以无论你在bike2还是bike1上做什么,你都会看到对象都有同样的效果。所以你可以这样:
Bicycle bike2 = new ...;
目前就像:
|bike1 at address1|
| gear 0 |
将bike2分配给bike1
|bike1 at address1|
| gear 0 |
/\
|
|bike2 referring bike1|
答案 1 :(得分:0)
基本上,你的猜测是正确的 - 在Java bike1
中,bike2
被称为对象引用。它们引用了一个对象,但它们只是引用。使用new Bicycle();
创建对象,bike1
引用此新创建的对象。
由于引用了bike1,bike2
“指向”同一个对象, BOTH 引用(可以)更改 ONE 对象。每当您想要获得对象的信息时 - 使用bike1
或bike2
- 信息都是相同的。