黑马程序员技术交流社区
标题:
这段代码把我搞昏头了!
[打印本页]
作者:
李能甫
时间:
2015-4-2 20:26
标题:
这段代码把我搞昏头了!
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);
}
}
}
复制代码
作者:
lrd7512369
时间:
2015-4-2 20:29
只new了一个Data对象,你可以对集合中的三个Data判断是否==,它们都是一样的,每次都是给同一个Data对象的val赋值
作者:
43453186@qq.com
时间:
2015-4-2 20:39
是不是打印100/101/102这三个数字啊
作者:
百思不得解
时间:
2015-4-2 20:40
你是哪里不明白呢
作者:
lwj123
时间:
2015-4-2 20:57
这样做是错误的,打印的值应该是102
因为你值创建了一个对象,每次循环赋值时实质上是改变变量的值而已。
将类对象村方法到集合中应该是一个类中不同的对象才是对的
所以你每次存对象时,都应该new 然后再对new的对象赋值
之后存放到集合中
作者:
山里孩子
时间:
2015-4-2 21:19
import java.util.ArrayList;
class Data {
int val;
}
public class Test {
public static void main(String args[]) {
//创建自定义Data类的对象
Data data = new Data();
//创建ArrayList集合,指定类型为自定义的Data类类型
ArrayList<Data> list = new ArrayList<Data>();
//循环对Data中的变量val赋值
for (int i = 100; i < 103; i++) {
data.val = i;
//使用ArrayList中的add方法添加数据
list.add(data);
}
//使用增强for循环对List集合输出
for (Data d : list) {
System.out.println(d.val);
}
}
}
复制代码
作者:
殷俊
时间:
2015-4-2 21:21
果真是陷阱,领教了,一直都是一个对象的i值在变化,因此只取了最后一个值,额,这一不小心就上当了{:2_30:}
作者:
tubao1991
时间:
2015-4-2 21:39
没看懂楼主你是想表达什么。
作者:
364785953
时间:
2015-4-2 21:45
头晕~~~~~~~~~~~~~~~
作者:
longlongint
时间:
2015-4-2 22:03
这是在逗我么,最后输出d.val不是输出val的值么 不就是三个102?
作者:
z47057554
时间:
2015-4-2 22:47
内存中只有一个Data的对象,集合中存了这个对象的引用三次,你改变了对象中的内容三次,每次改变都操作的同一个对象,后面的操作会覆盖掉前面的操作,最后又把这个对象中的值打印了三次
作者:
李能甫
时间:
2015-4-3 08:46
43453186@qq.com 发表于 2015-4-2 20:39
是不是打印100/101/102这三个数字啊
打印的是三个102
作者:
懒的呼吸
时间:
2015-4-3 08:54
又注意到小细节了~长知识了
作者:
胡几手
时间:
2015-4-3 09:22
看不懂。。。。。
作者:
43453186@qq.com
时间:
2015-4-3 21:27
长见识了。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2