黑马程序员技术交流社区
标题:
小程序运行结果有点想不明白
[打印本页]
作者:
袁银凤
时间:
2013-8-14 21:40
标题:
小程序运行结果有点想不明白
本帖最后由 袁银凤 于 2013-8-14 23:05 编辑
import java.util.ArrayList;
class Data {
int val;
}
public class Test {
public static void main(String args[]) {
Data data = new Data();
ArrayList<Data> list = new ArrayList<Data>();
for (int i = 100; i < 103; i++) {
data.val = i;
list.add(data);
}
for (Data d : list) {
System.out.println(d.val);
}
}
}
复制代码
运行结果都是102,有点迷糊,望前辈们给醍醐灌顶一下!
作者:
jrry
时间:
2013-8-14 22:17
你这样写的话,Data只new了一次,所以list中加了三个相同的对象,并且这个对象中的属性val被赋了三次值,最后一次赋的值是102,
你把Data data = new Data();放入for循环里面就达到你要的效果了。。
for (int i = 100; i < 103; i++) {
Data data = new Data();
data.val = i;
list.add(data);
}
复制代码
作者:
高波
时间:
2013-8-14 22:21
首先你的List泛型时Data,也就是list中装的是Data对象的地址,而你只创建了一个对象,所以无论你添加多少次都是这一个对象的地址,你的for循环改变的是变量val的值,也就是说Data对象的val变量值在一次次被覆盖,循环结束后,你的Data对象中只有一个val =102,而你的list中装的又都是同一个对象的地址,所以增强for打印出来的结果是3个102.
你要看到三个不同的变量值,要创建3个对象,所以把创建对象也写到for循环里
import java.util.ArrayList;
class Data {
int val;
}
public class Test {
public static void main(String args[]) {
ArrayList<Data> list = new ArrayList<Data>();
for (int i = 100; i < 103; i++) {
//三个对象各自对应自己的val,val就有三个值了
Data data = new Data();
data.val = i;
list.add(data);
}
for (Data d : list) {
System.out.println(d.val);
}
}
}
复制代码
作者:
袁银凤
时间:
2013-8-14 23:04
高波 发表于 2013-8-14 22:21
首先你的List泛型时Data,也就是list中装的是Data对象的地址,而你只创建了一个对象,所以无论你添加多少次 ...
正好也想明白了,不过你的解答更全面一些!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2