在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));
}
}
答案 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?)