把 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 的内容冲掉了?

...全文
227 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧