把 String[] 放入Vector 时得到意外结果,不明白:<

kingapex1 2004-09-03 06:26:38
Test.java
------------------------------------------------------------
import java.util.*;

public class Test {
public static void main(String args[]) {
Vector vTemp = new Vector();
String[] temp =new String[2];
String[] tempAr =null;


for(int j=0;j<5;j++){
for (int i = 0; i < temp.length; i++) {
temp[i] = "dd" + j;
}
vTemp.addElement(temp);
}




for(int i=0;i<vTemp.size();i++){
tempAr=(String[])vTemp.elementAt(i);
System.out.print("\n Vector "+i + " is : ");
for(int j=0;j<tempAr.length;j++){
System.out.print(tempAr[j]+"+");
}


}


}

}

运行:
--------------------------------------------------------


Vector 0 is : dd4+dd4+
Vector 1 is : dd4+dd4+
Vector 2 is : dd4+dd4+
Vector 3 is : dd4+dd4+
Vector 4 is : dd4+dd4+

为什么不是

0
1
2
3
4

??
把以前的 vector 的内容冲掉了?

...全文
146 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
debug158 2004-11-20
ding
回复
hsami 2004-09-03
赞同flyfoxx的 。
Vector里面存的是reference,循环里面重新赋值只是改变指向的内容,但是存到Vector里面的是同一个reference,所以读出来的都是最后一个指向内容。
所以循环里面需要分配新的对象空间,只有这样,保存到Vector里面的是不同的reference,指向的也是不同的内容。
回复
flyfoxx 2004-09-03
我觉得 应该是 vTemp.addElement(temp); 保存的是 temp的地址,所以造成最后全部是dd4。 应该放在循环里面每次都生成一个新的地址,那么vTemp保存的就不同了。
回复
flyfoxx 2004-09-03
import java.util.*;
public class test
{
public static void main(String[] args)
{
Vector vTemp = new Vector();
String[] tempAr = null;
String t = null;
for(int j=0; j<5; j++)
{
String[] temp = new String[2];
for(int i=0; i<temp.length ;i++)
{
temp[i]="dd"+j;
}
vTemp.addElement(temp);
}

for(int i=0;i<vTemp.size();i++)
{
tempAr=(String[])vTemp.get(i);
System.out.print("\n Vector "+i + " is : ");
for(int j=0;j<tempAr.length;j++)
{
System.out.print(tempAr[j]+"+");
}
}
}
}
回复
gutensu 2004-09-03
刚才说的不是很准确,应该是这样:

temp 在整个main()里面有效,当你用 vTemp.addElement(temp); 这条语句时,相当于把temp这一个对象的引用 全部付给了 Vector vTemp,当循环结束后 temp的取值是temp[0]=4,temp[1]=4,但是vTemp[i]全部指向temp,所以造成了你 那样的结果。

不知道对不对,其他人有何高见
回复
gutensu 2004-09-03
同意shine333(enihs)

你把变量的作用域忽视了 :)
回复
战箫 2004-09-03
用Vector类的get()方法取Vector对象中的值。
回复
shine333 2004-09-03
//String[] temp =new String[2];
for(int j=0;j<5;j++){
String[] temp =new String[2];
for (int i = 0; i < temp.length; i++) {
temp[i] = "dd" + j;
}
vTemp.addElement(temp);
}
回复
kreven 2004-09-03
用get()方法获取值!
回复
Tasia 2004-09-03
为什么是;
0
1
2
3
4


运行结果是对的
回复
XIHSHI 2004-09-03
UP
回复
kingapex1 2004-09-03
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-09-03 06:26
社区公告
暂无公告