我在我的一个叫做Board的课程中有以下方法。 Board有一个120平方的数组,这是我程序中的另一个类。
public class Board{
private Square[] square = new Square[120];
...
每个Square都有一个int行和一个int列。
public class Square extends JButton{
public int row;
public int column;
...
该方法本身应该弄清楚
中每个Square的行和列是什么 void setSquares() {
int ones;
int tenths;
Square s = new Square();
Insets squareMargin = new Insets(5, 5, 5, 5);
s.setMargin(squareMargin);
for (int i = 0; i < square.length; i++){
ones = getNdigit(i, 1);
tenths = getNdigit(i, 2);
//set row && set column
if ((tenths >= 2 && tenths <= 9) && (ones >= 1 && ones <= 8)){
s.row = tenths - 1;
s.column = ones;
} else{
s.row = 0;
s.column = 0;
}
square[i] = s;
System.out.println(square[0].toString());
}
所以在方法的最后,我期望square [34]有一行2和一列4.但是,实际结果总是和for循环结束的那样(square [34]有0)的行和列。 如果for循环更改为
for (int i = 0; i < 55; i++){
然后square [34]有一行4和一列4。
答案 0 :(得分:2)
您只创建了Square
的一个实例,并在整个for循环中使用它。在for循环中移动实例化,以便存储的每个实例都不同。
在评论中回答您的问题:
Square s = new Square();
在内存中分配一些空间来存储Square
实例(您可以在其中为其成员设置值)。所以现在s
引用了内存中的空间。
square[i] = s;
所以现在square[i]
引用相同的空格(因此具有相同的成员值)。因此,对于同一位置的每个i
所有square[i]
个引用(Square
的相同实例)。但是如果每次迭代分配s
一个,那么s
将引用一个新的方格,每个square[i]
将引用一个不同的Square
实例