8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

P-Gn 1月前

18 0

公共类 DrumKitTestDrive {/** * @param args */public static void main(String[] args) { // TODO 自动生成的方法存根 Echo e1 = new Echo(); Echo e2 = new Echo();// **...

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 实例中。如果系统这样做,结果将保持不变,因为两个对象属于同一类。

帖子版权声明 1、本帖标题:当一个对象被分配给另一个对象时会发生什么
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由P-Gn在本站《object》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 尝试为方法 Echo 创建构造函数,并使用另一个对象作为参数。并将参数对象的值分配给该对象。即'''

    Echo(Echo echo) {
      this.count = echo.count;
    }
    

    '''

    然后创建节点 e2 如下:

    Echo e2 = new Echo(e1);
    
  • 将一个对象赋值给另一个对象只是赋值了对象引用(或多或少是一个指针)。它不会复制成员变量等。

    您需要阅读有关 克隆的内容 。 来自 Java wiki 的第一段 clone() :

    在 Java 中,对象是通过引用变量来操作的,并且没有用于复制对象的运算符——赋值运算符复制的是引用,而不是对象。 clone() 方法提供了这一缺失的功能。

  • 这是 Java 的基本原则之一。每个变量只是某个对象的句柄。执行

    e1=e2
    

    不会复制对象的值,它会将两个对象都指向 handles 创建的第二个对象。 Echo 您实例化的第一个对象现在根本没有被引用,并且会在下次 gc 运行时被垃圾回收。

  • 嘿@Avv。如果我理解你的问题:是的。在赋值 e2 = e1 之后,现在你只是对同一事物有了 2 个不同的名称。因此,在 e2 或 e1 上调用方法将产生相同的效果:两者都将操作相同的基础对象。

  • 谢谢!这是否意味着复制另一个对象的引用的对象将能够更改其值并调用其方法等?那么,我们将不会拥有该对象的副本?

  • 我的理解是系统只会将 e1 实例的值复制到 e2 实例中。

    不,当你这样做时, e2 = e1 你正在复制对象 引用 - 你没有复制对象 - 因此变量 e1 e2 都指向 同一个对象 .

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

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

返回
作者最近主题: