为什么这行代码在运行?

时间:2015-12-11 23:59:21

标签: java object

public static void main(String[] args)
  {
List<Integer> list = new ArrayList<Integer> ();
list.add(6);
list.add(1);
list.add(8);

int len = list.size();
for (int i = 0; i < len; i++) {
    list.add(i+1, new Integer(i));
    System.out.println(list + "Iteration: " + i);
    Object x = list.set(i, new Integer(i+2));
}

System.out.println(list);
  }

为什么这段代码有效?它将arraylist变成:

[6,0,1,8]迭代:0

[2,0,1,1,8]迭代:1

[2,3,1,2,1,8]迭代:2

[2,3,4,2,1,8]

但我不确定为什么这行编译:

 Object x = list.set(i, new Integer(i+2));

是不是将对象分配给不返回任何内容的方法?

3 个答案:

答案 0 :(得分:5)

set method in List返回之前在该位置的内容。

  

返回:

     

之前位于指定位置的元素

这就是它编译的原因。

答案 1 :(得分:4)

根据How can I prevent SQL injection in PHP?,返回元素是先前在该位置的元素。

它不会返回无效。

答案 2 :(得分:1)

如果有疑问......

     System.out.println(x.toString() + " x: " +i);

在你的对象赋值后抛出它,它会显示x的内容。如果你运行它,你将得到以下输出:

 [6, 0, 1, 8]Iteration 0
 6 x:0
 [2, 0, 1, 1, 8]Iteration 1
 0 x:1
 [2, 3, 1, 2, 1, 8]Iteration 2
 1 x:2
 [2, 3, 4, 2, 1, 8]

从这里你可以看到每次迭代从list.set()方法返回的内容。第一次返回列表的第一个元素时,列表打印显示第一个元素已更改。下一次迭代返回第二个元素,然后打印列表并替换第二个元素。下一次迭代也会发生同样的情况。