数组实例变量是否与setter方法的使用无关?

时间:2019-06-27 20:49:14

标签: java arrays getter-setter setter instance-variables

  

在main方法中,我创建了DotComClass的新对象并进行设置   locationOfShips数组为14个数字。然后将这些值作为   另一个类中的setter方法(setLocations)的参数   (见下文)。我的问题是为什么它允许没有   问题,因为我设置了位置元素的最大数量   实例变量是5?


  import java.util.Arrays;

  public class Main {
    public static void main(String[] args) {
      DotComClass dotCom = new DotComClass();
      int[] locationOfShips = {6,7,8,9,1,2,3,4,4,4,4,5,5,5};        
      dotCom.setLocations(locationOfShips);       
    }
  }

  public class DotComClass {
   int [] locations = new int[5]; // is this not related to the locations in the setter?

   public void setLocations (int[] locations){
     this.locations= locations;
     System.out.println(Arrays.toString(locations));
     }
  }

2 个答案:

答案 0 :(得分:1)

locations字段是对数组的引用

这指向一个由5个整数组成的新数组。

int [] locations = new int[5]; // is this not related to the locations in the setter?

这将重新指向对不同数组的引用。

this.locations= locations;

新数组具有自己的大小。不受引用先前指向的数组大小的限制。

答案 1 :(得分:0)

您正在犯一个简单的错误,变量int [] locations = new int[5];实际上不包含长度为5的数组。实际上,它只是在堆上某个地方保存了对长度为5的数组的引用。

这正是下面的语句也在做的事情

int[] locationOfShips = {6,7,8,9,1,2,3,4,4,4,4,5,5,5};

因此,当您运行this.locations= locations;时,实际上是在说变量现在指向数组locationOfShips

如果不清楚,我建议您在此处阅读有关通过引用的良好解释(Are arrays passed by value or passed by reference in Java?