java - 为什么执行代码后bike1,3的值是?

标签 java class methods

当您运行以下代码时,bike1 和 bike2 的齿轮值都更改为 3。你能解释为什么吗? 我自己的猜测是因为 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);
    }

}

最佳答案

这里:

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|

关于java - 为什么执行代码后bike1,3的值是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462239/

相关文章:

java - Maven和SpringBoot调试-Drun.jvmArguments=-Xdebug到底是什么意思

一个元素上有两个类的 CSS 选择器

java - 调用Class类型对象的方法

java - 对类中的多个设置方法使用扫描仪方法

java - 管理动态本地化资源

java - 在 ArrayBlockingQueue 中,为什么要将 final 成员字段复制到本地 final 变量中?

java - string.length 在 java 中不能正常工作

javascript - 私有(private)方法使用或不使用函数的困惑

c++ - 在类中存储 typedef 构造函数

构造函数中的 Java 可重写调用