黑马程序员技术交流社区
标题:
入学考试分析题,不太懂
[打印本页]
作者:
杨希
时间:
2014-9-18 16:14
标题:
入学考试分析题,不太懂
大家能帮我看看这道题吗,说实话我也不知道结果为什么是102,102,102,能详细分析一下吗,谢谢
public class a111a {
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);
}
}
}
class Data {
int val;
}
复制代码
作者:
Fightin黑马
时间:
2014-9-18 21:42
因为你只new了一个对象呀, 集合里面的三个地址都是一个Data对象的, data.val= i; 改变了val3次属性,最后就是102了.
要new 3个对象才有你想要的效果
作者:
hejinzhong
时间:
2014-9-18 22:56
因为你list中存的是对象,而且一直对同一个对象进行操作
作者:
yuli2039
时间:
2014-9-18 23:02
new了一个对象,对这个对象的成员变量赋了三次值,当然以最后一次赋值为准。相当于int a=0; a=1; a=2;syso(a);//这里a当然等于2
作者:
谢建平
时间:
2014-9-19 06:14
一个对象 赋值一次后 再拷贝到集合, 一共拷贝三份到集合
作者:
菜鸟一号
时间:
2014-9-19 08:53
谢谢楼主的分享,谢谢各位的评点
作者:
杨希
时间:
2014-9-19 17:31
Fightin黑马 发表于 2014-9-18 21:42
因为你只new了一个对象呀, 集合里面的三个地址都是一个Data对象的, data.val= i; 改变了val3次属性,最后就 ...
谢谢,自己也查过资料了,也懂了,你说的也很好
作者:
clh
时间:
2014-9-19 17:51
会被覆盖
作者:
爽朗的菜籽
时间:
2014-9-19 20:12
import java.util.ArrayList;
public class ArrayListDemo
{
public static void main(String[] args)
{
ArrayList<Integer> al = new ArrayList<Integer>();
Integer itg = new Integer(5);
for(int i=0; i<3; i++)
{
itg = i;
al.add(itg);
}
for(int i:al)
{
System.out.println(i);
}
}
}
复制代码
可是这个的答案是0 1 2.。。晕了
作者:
曾小贤OL
时间:
2014-9-19 20:33
为什么亲友卷变成120黑马币了,坑啊!
作者:
李东东
时间:
2014-9-19 20:58
为什么我复制你的代码不能编译呢?
作者:
Aaron_H
时间:
2014-9-19 21:11
public static void main(String[] args) {
//看这里,在这里new出一个Data对象
Data data = new Data();
ArrayList<Data> list = new ArrayList<Data>();
for (int i = 100; i < 103; i++) {
//在这里每一次操作的都是上面的这个对象,val的值被重写的三次,有效值是最后一次的值
data.val= i;
//在这里把Data对象添加进list,虽然添加了三次,但每一次添加的都是相同的地址,都是指向同一个对象
list.add(data);
}
//就是说虽然这个list中有三个地址,但都是一个东西,遍历的时候循环了三次,都是一个对象
for (Data d : list) {
System.out.println(d.val);
}
}
}
class Data {
int val;
}
复制代码
给你加上了注释,能力有限,只总结了这么多
作者:
高泳
时间:
2014-9-19 21:23
new了一个对象data,在list中添加了三次地址,不过三次地址都是data的,最终data赋值102,所以输出了三个102.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2