为什么执行代码后bike1,3的值是多少?

时间:2015-05-26 15:02:00

标签: java class methods

当您运行以下代码时,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);
    }

}

2 个答案:

答案 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 对象。每当您想要获得对象的信息时 - 使用bike1bike2 - 信息都是相同的。