java - 使用 new 初始化变量,然后进行赋值和在初始化时仅赋值之间有区别吗?

标签 java object reference

我正在努力学习Java。

我有一个自定义类,它具有属性:

public class Person{
    private String name;
}

我还有另一门课,我在那里:

public class foo{
    private Person guy;

    public void setGuy(Person guy){
        this.guy = guy;
    }

    public Person getGuy(){
        return guy;
    }

    void someMethod(){
        Person anotherGuy = new Person();
        anotherGuy = getGuy();
    }
}

当我使用getGuy()方法时我很困惑。 我认为当我这样做时:

Person anotherGuy = new Person();
anotherGuy = getGuy();

我创建了一个新对象,它与 Guy 具有相同的值。但看起来 anotherGuy 实际上是一个指向 Guy 的指针。 所以

Person anotherGuy = getGuy();

和上面两行,做的事情完全一样吗?我很困惑。那么如何在内存中创建一个全新的对象呢?

最佳答案

So

Person anotherGuy = getGuy();

and the above 2 lines, do the exact same thing?

不,另一个版本首先创建一个新的 Person() 对象,然后丢弃它(这只是浪费内存和处理器周期)。

关于java - 使用 new 初始化变量,然后进行赋值和在初始化时仅赋值之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531459/

相关文章:

java - 如果仅从垃圾中引用一个对象,它就是垃圾吗?

java - 如何在java中解析 "HTTP Error 411. The request must be chunked or have a content length."

c++ - 模板参数中的T&和T&&有什么区别?

java - 是否存在零参数谓词?

java - 在 GAE 数据库中添加子元素

jquery - 使用 jQuery 将 <object> 的所有实例更改为 &lt;iframe&gt; 以支持 IE

vba - 对象变量或带 block 变量未使用查找功能在循环中设置

具有可变属性的Javascript对象: Is it possible?

c - c程序中for循环中的指针

excel - VBA:如果在引用表中找到值,则将数据+字段从源表拉到目标表