黑马程序员技术交流社区
标题:
一个结果的困惑。
[打印本页]
作者:
王廷顺
时间:
2013-7-19 20:48
标题:
一个结果的困惑。
本帖最后由 王廷顺 于 2013-7-19 22:47 编辑
为什么会出现3个结果。代码如下
import java.util.ArrayList;
class Person {
int val;
}
public class Test3 {
public static void main(String args[]) {
Person p = new Person();
ArrayList<Person> list = new ArrayList<Person>();
for (int i = 80; i < 83; i++) {
p.val = i;
list.add(p);
}
for (Person d : list) {
System.out.println(p.val);
}
}
}
作者:
周之浩
时间:
2013-7-19 21:15
在list中存放的是对象的指针,你的程序中每次存入的对象都是跟着p的指针改变而改变,是因为你对象的初始化在for循环外部造成的,在者你程序中最后一个循环有错误,对象定义为d,输出时却用p对象,下面是我给你修改以后的代码,希望你能明白
package test;
import java.util.ArrayList;
class Person {
int val;
}
public class Test3 {
public static void main(String args[]) {
Person p = null;
ArrayList<Person> list = new ArrayList<Person>();
for (int i = 80; i < 83; i++) {
p = new Person();
p.val = i;
list.add(p);
}
for (Person p1 : list) {
System.out.println(p1.val);
}
}
}
复制代码
作者:
刘张朋
时间:
2013-7-19 22:31
首先你的代码只有一个person对象,for循环只是给同一个person对象的val多次赋值,并再次添加到list中,因此list中存放的其实是同一个对象,那么增强for遍历出来的对象是同一个,val属性也应该相同
另外遍历得到的应该是Object对象,应该要加强转哈
作者:
王廷顺
时间:
2013-7-19 22:47
周之浩 发表于 2013-7-19 21:15
在list中存放的是对象的指针,你的程序中每次存入的对象都是跟着p的指针改变而改变,是因为你对象的初始化 ...
哦 明白了 你说的很对,非常感谢。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2