java - 当一个对象被分配给另一个对象时会发生什么

标签 java object

public class DrumKitTestDrive {
/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Echo e1 = new Echo();
    Echo e2 = new Echo();
//      **e2 = e1;**

    int x=0;
    while( x < 4 ){
        e1.hello();
        e1.count = e1.count + 1;
        if(x==3){
            e2.count = e2.count + 1;
        }
        if(x>0){
            e2.count = e2.count + e1.count;
        }
        x = x + 1;
    }
    System.out.print(e2.count);
    }
}

class Echo {
    int  count = 0;

    void hello(){
        System.out.println("Hellooooo....");
    }
}

这段代码的输出将是:

Hellooooo....
Hellooooo....
Hellooooo....
Hellooooo....
10

但是如果我在运行代码时从 //e2= e1; 中删除注释,系统将打印 24 而不是 10 .我不明白为什么会这样?

据我所知,系统只会将 e1 实例的值复制到 e2 实例中。如果系统这样做,结果将保持不变,因为两个对象属于同一类。

最佳答案

What I understand is the system will just copy the values of e1 instance into e2 instance.

不,当您执行 e2 = e1 时,您正在复制对象 references - 您不是在复制对象 - 所以变量 e1e2 都指向同一个对象

因此,当您进行递增时,它们都会递增相同的计数字段。

只有在没有分配 e2 = e1 时,增量才会发生在两个不同的实例上。

关于java - 当一个对象被分配给另一个对象时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020417/

相关文章:

c++ - 我可以在运行时在 C++ 中更改对象的类型吗

javascript - 如何在对象中传播嵌套属性?

javascript - Jquery 对象在排序后未定义,但在 firebug 中

java - 我需要帮助创建一个函数,该函数将从 Java (Selenium) 中的 CSV 文件读取(打开新的浏览器选项卡)url

java 7目录监控问题

java - Android ViewModel 到模型事件

java - 如何在不重复的情况下通过 A 类将 Java 中的对象从 B 类传递到 C 类

java - 静态初始化程序和静态同步方法锁定问题

java - 网页中的 GPS 位置

javascript - 如何从对象数组中删除元素?