CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

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

楼主kingapex1(忘掉将来)2004-09-03 18:26:38 在 Java / Web 开发 提问

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中吗?

关键词

  • vector
  • test

得分解答快速导航

  • 帖主:kingapex1
  • XIHSHI
  • shine333
  • gutensu
  • flyfoxx
  • hsami

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo