【问题标题】:Equalization two complicated objects in java (two objects that are made from other object)均衡java中的两个复杂对象(由另一个对象组成的两个对象)
【发布时间】:2012-10-21 15:13:00
【问题描述】:

假设您在 java 中有这段代码: 联系人由姓名和号码组成,电话簿由联系人数组组成。

//set -> 这个方法是真的复制并创建新的内存位置还是只是指向内存?

public void setContact(Contact[] contact)
{
    this.contact =  contact; // <----this
}

谢谢。

【问题讨论】:

    标签: java object memory point


    【解决方案1】:

    数组是对象,在Java中对象引用是按值传递的。因此调用此方法会使this.contact 成为对作为参数传递的联系人数组的引用的副本。不复制数组元素。没有复制数组。

    【讨论】:

    • 所以这个方法没用,还得用复制构造方法?
    • 为什么没用?制作数组的副本可能更合适,但这取决于上下文。复制数组中的每个联系人也可能更合适,但它更多地取决于上下文。例如,如果 Contact 是一个不可变的类,那么复制是没有意义的。无论如何我都会避免使用数组,而是使用集合。
    • 我还没有学过收藏。无论如何,谢谢你的回答。但是让我再检查一下:如果我使用此方法并再次更改 this.contact ,那么之后联系人将更改,因为它们指向相同的内存?
    • 是的,您所做的任何更改都会反映在两个变量上,因为它们引用的是同一个数组。
    【解决方案2】:

    通过使用它,您可以设置对堆栈中堆中对象的引用 即您的对象在堆中,而您的引用在堆栈中

    仅通过使用 new 关键字,您将获得在堆中获取空间的新对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-17
      • 2018-10-10
      • 1970-01-01
      • 2022-08-13
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多