关于Vector的小问题 Vector vec1 = new Vector();vec1.add("测试");Vector vec2 = new Vector();vec2 = vec1;如上,如果运行vec2.remove(0);为什么连vec1中的记录也被删除了?请高手讲讲原理,用vec2 = vec1;这种方法不行吗?另外有没有其它的好方法可以解决这个问题呢?(别说将vec1中数据取出来再放到vec2中) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 vec2=vec1使得vec2也指向vec1了,所以此时vec2.remove(0)会把vec1的也删掉 Vector vec2 = new Vector();vec2 = vec1;vec2指向了vec1vec2.remove(0);实际是vec1.remove(0);详细查看vector的api,如何克隆一个. vec2 和vec1,2个引用指向同一个对象,可以看成浅拷贝!任何一个改变,都会影响到另一个! Vector的clone方法,生成新的对象在赋值到第二变量中。 他们指向了相同的内存地址操作一个会带动另一个的,我刚才做了一个示例我发现一个很有意思的东西,所以我现在推荐大家千万不能使用vector怎么说呢,lz因为new 了两个Vector(),那么他们分别指向了不同的内存地址,但是如果赋值的话v1=v2,那么它不仅将内容赋过去,并且连内存地址都指向相同的,所以这样做是不行的,建议不要使用Vector,或者shiyongVector但是不要给不同的Vector互相赋值;比如Stirng str1 = new String("aaa");定义了String对象,并且分配了内存空间String str2 = new String();或者String str2 = "";str2 = str1;str1 = new String();将内容清空,但是重新指向了地址,但是此时str2还是aaa;显然和Vector不一样,我用数组也试过,还是不一样! String 类的对象和其他类的对象是不一样的String类是一个final类,它的对象已经创建便不能改变引用的内容,要想改变内容只有重新分配内存~! Vector vec1 = new Vector();这句声明一个vec1引用指向一个Vector对象内存地址。vec1.add("测试");上面这句在这个地址上添加为vec1指向的Vector对象添加值Vector vec2 = new Vector();这句声明一个vec2引用指向另一个Vector对象内存地址。此时内存有2个Vector对象分别位于不同地址,并且有2个引用vec1,vec2分别指向这两个地址vec2 = vec1;这句是让vec2也指向vec1所指向的内存地址,原本vec2所指向的地址还放在那,这个时候vec1与vec2引用的是同一个对象,也就是说操纵的是同一个地址这时你用vec1和vec2操作这个地址的效果当然就是一样的。 vec2 = vec1;这句的意思是vec2和vec1指向了同一个引用,所以修改一个,另外一个也会被修改所以都被清空了 复制内容要用addAll方法,参数是collection类型public static void main(String[] args) { // TODO Auto-generated method stub Vector vec1 = new Vector(); vec1.add("测试"); Vector vec2 = new Vector(); vec2.addAll(vec1); //vec2 = vec1; vec2.remove(0); System.out.println(vec1.elementAt(0)); } "="在这里不是赋值,而是重定向.在这里的"vec2","vec1",都叫做引用,vec2 = vec1;这句不过是把两个引用都指向了同一内存地址,所以vec2.remove(0);当然也会影响vec1,因为vec2影响了根本啊你要想达到目的不防试试clone()这个方法,Vector vec2=vec1.clone();. Java基础中的基础啊!这种问题!!! java 对象传参数 可否传类型相同的参数 java当中金额数字转中文大写,实现代码 ORACLE 用DELETE删除数据 java能做语音聊天室么. iis+tomcat5.0显示有点问题 lucene-1.4.3 搜寻结果如何只显示关键字相关的上下文 ? 哪个有jdk帮助文档 初学 ~ 这个不是太明白,请指点! 我在jdk1.2中测试书上的一个小程序,有一处警告,请问怎么处理。 哪有jbuilder的教程下载(中文的) 谁能帮我看看这个程序,哪里错了 ,谢谢了 关于获取list中的对象
vec2 = vec1;
vec2指向了vec1
vec2.remove(0);
实际是vec1.remove(0);
详细查看vector的api,如何克隆一个.
怎么说呢,lz因为new 了两个Vector(),那么他们分别指向了不同的内存地址,但是如果赋值的话v1=v2,那么它不仅将内容赋过去,并且连内存地址都指向相同的,所以这样做是不行的,建议不要使用Vector,或者shiyongVector但是不要给不同的Vector互相赋值;
比如
Stirng str1 = new String("aaa");定义了String对象,并且分配了内存空间
String str2 = new String();或者String str2 = "";
str2 = str1;
str1 = new String();将内容清空,但是重新指向了地址,
但是此时str2还是aaa;
显然和Vector不一样,我用数组也试过,还是不一样!
String类是一个final类,它的对象已经创建便不能改变引用的内容,
要想改变内容只有重新分配内存~!
这句声明一个vec1引用指向一个Vector对象内存地址。
vec1.add("测试");
上面这句在这个地址上添加为vec1指向的Vector对象添加值
Vector vec2 = new Vector();
这句声明一个vec2引用指向另一个Vector对象内存地址。此时内存有2个Vector对象分别位于不同地址,并且有2个引用vec1,vec2分别指向这两个地址
vec2 = vec1;
这句是让vec2也指向vec1所指向的内存地址,原本vec2所指向的地址还放在那,这个时候vec1与vec2引用的是同一个对象,也就是说操纵的是同一个地址
这时你用vec1和vec2操作这个地址的效果当然就是一样的。
这句的意思是vec2和vec1指向了同一个引用,所以修改一个,另外一个也会被修改
所以都被清空了
public static void main(String[] args) {
// TODO Auto-generated method stub
Vector vec1 = new Vector();
vec1.add("测试");
Vector vec2 = new Vector();
vec2.addAll(vec1);
//vec2 = vec1;
vec2.remove(0);
System.out.println(vec1.elementAt(0));
}
这句不过是把两个引用都指向了同一内存地址,所以vec2.remove(0);当然也会影响vec1,因为vec2影响了根本啊
你要想达到目的不防试试clone()这个方法,Vector vec2=vec1.clone();.