把 String[] 放入Vector 时得到意外结果,不明白:<
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 的内容冲掉了?
问题点数:50、回复次数:12Top
1 楼kingapex1(忘掉将来)回复于 2004-09-03 19:03:07 得分 0
顶Top
2 楼XIHSHI(西红柿)回复于 2004-09-03 19:22:37 得分 2
UPTop
3 楼Tasia(灯盏)回复于 2004-09-03 19:24:46 得分 0
为什么是;
0
1
2
3
4
?
运行结果是对的Top
4 楼kreven(J2EE学不会)回复于 2004-09-03 19:48:49 得分 0
用get()方法获取值!Top
5 楼shine333(enihs)回复于 2004-09-03 22:17:25 得分 23
//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);
}
Top
6 楼jsgzhanxiao(战箫)回复于 2004-09-03 22:45:02 得分 0
用Vector类的get()方法取Vector对象中的值。
Top
7 楼gutensu(gutensu)回复于 2004-09-03 22:59:24 得分 5
同意shine333(enihs)
你把变量的作用域忽视了 :)Top
8 楼gutensu(gutensu)回复于 2004-09-03 23:28:53 得分 0
刚才说的不是很准确,应该是这样:
temp 在整个main()里面有效,当你用 vTemp.addElement(temp); 这条语句时,相当于把temp这一个对象的引用 全部付给了 Vector vTemp,当循环结束后 temp的取值是temp[0]=4,temp[1]=4,但是vTemp[i]全部指向temp,所以造成了你 那样的结果。
不知道对不对,其他人有何高见Top
9 楼flyfoxx(fox)回复于 2004-09-03 23:32:11 得分 15
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]+"+");
}
}
}
}
Top
10 楼flyfoxx(fox)回复于 2004-09-03 23:37:44 得分 0
我觉得 应该是 vTemp.addElement(temp); 保存的是 temp的地址,所以造成最后全部是dd4。 应该放在循环里面每次都生成一个新的地址,那么vTemp保存的就不同了。Top
11 楼hsami(石头)回复于 2004-09-03 23:59:27 得分 5
赞同flyfoxx的 。
Vector里面存的是reference,循环里面重新赋值只是改变指向的内容,但是存到Vector里面的是同一个reference,所以读出来的都是最后一个指向内容。
所以循环里面需要分配新的对象空间,只有这样,保存到Vector里面的是不同的reference,指向的也是不同的内容。Top
12 楼debug158(过客)回复于 2004-11-20 17:01:49 得分 0
dingTop
相关问题
- vector<vector<string> > 有错误吗??
- list < vector <string> > slist --> help
- std::vector<std::string>的问题
- 意外的“std::string”类型??怎么回事?
- 各位,救急呀!怎样将ResultSet中的数据逐行放入Vector对象中??
- 关于vector<string>的问题(40分).
- vector<string> 类型 怎么写入文件?
- vector<string, allocator> *lines_of_text = new vector<string,allocator>; 这个定义不太明白
- Vector
- #include<string>,#include<vector>这些都放在StdAfx.h中吗?




