【问题标题】:Accessing array variable of another class访问另一个类的数组变量
【发布时间】:2012-11-26 09:09:33
【问题描述】:

假设我有一门课如下:

public class class1{

   private int[] array1;

   public class1(){
      array1 = new int[10];
      }

   public int[] getArray(){
      return array1;
      }
}

如果我在另一个类或 main 中创建该类的实例并使用 getArray() 方法将数组分配给上层类中的另一个变量,然后在那里修改数组的值,原始数组值头等舱也要修改吗?

【问题讨论】:

  • 你为什么不自己尝试一下?
  • 试试看.. :/ 然后你就会学到...
  • 是的,你们是对的。我一直在努力完美地完成我的项目,我忘记了我总是可以创建一个简单的测试类。谢谢。

标签: java arrays scope


【解决方案1】:

第一个类中的原始数组值也会被修改吗?

是的,它将被修改,因为您在调用者中获得的不是数组本身的副本,而是您获得对原始数组对象的引用的副本。

而且,如果您使用任何引用修改数组,则更改将反映到指向该数组的所有引用。

【讨论】:

  • 感谢您的回复。在玩了一点代码之后,我意识到如果原始变量是整数变量,它的工作方式就不一样了。根据您的解释,我认为传递引用和值之间存在差异。除了使用传统的 setter 和 getter 方法修改它之外,有没有办法将第一个类的整数变量的引用传递给调用类?
  • @user1887413。好吧,在 Java 中,一切都是按值传递的。所以,如果你传递一个整数,它的值会被复制到 callie 中。因此,所做的更改不会反映在调用者中。现在,您可能认为可以使用 Integer 引用而不是原始 int,但在这种情况下,由于 Integer 是不可变的,因此所做的任何修改都会创建另一个 Integer 对象,从而使原始对象保持不变。所以,不,你不能那样做。您必须使用setters 来修改它们的值。
【解决方案2】:

是的,原来的数组值也会被修改。

当您从方法返回数组的引用时。引用只不过是指向对象地址的指针。当你从方法中返回它时,它被分配给另一个引用。如果您使用该引用修改任何内容,则本质上是在修改相同的数组,即原始数组。

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多