为什么输出2个值会相同,如何解决这个问题呢.因为这只是个测试,实际程序里我需要保存1个返回的对象,对这个对象需要添加一个结点然后再跟原来的没加结点的那个进行计算比较.结果发现程序有问题,找了半天才发现在添加一个结点后原来那个也自动加了个,我不知道怎么解决这个问题.莫非这里是引用?import java.util.*;
class A{
Vector a;
A(){
a=new Vector();
}
public void add(int num){
a.add(new Integer(num));
}
public static void main(String[] args){
A a=new A(); A b=a;
A c=a;
b.add(1);
System.out.println(b.a.get(0));
System.out.println(c.a.get(0));
}
}
class A{
Vector a;
A(){
a=new Vector();
}
public void add(int num){
a.add(new Integer(num));
}
public static void main(String[] args){
A a=new A(); A b=a;
A c=a;
b.add(1);
System.out.println(b.a.get(0));
System.out.println(c.a.get(0));
}
}
解决方案 »
- java类的访问隔离问题
- windows2003上奇怪的乱码问题,请大家帮忙
- [求助][求顶]求UDP传送大文件Demo,附上我的拆分代码.
- JAVA中的eval , 能计算字符串的算数公式(源代码)
- GUI学哪一个?
- JBUILDER中使用SWING时自定义异常问题
- 怎样遍历本机驱动器
- 菜鸟问题,向各位求教,急,在线等待!!!
- 紧急求助。
- 我想在APPLICATION中显示图片,应用程序没有浏览器所提供的资源,不能使用getImage()或getAudioClip()。在application中如何返回一个Image对象?
- 怎么在用java向linux上传文件问题
- 请问, Long 声明的数据, 1L -1L , L 是什么意思啊?
A c=a;
使得 b 和 c,指向了同一个对象下面就可以解决
A b = new A();
A c = new A();
b.add(1);
所以
c.a 长度为0
导致c.a.get(0)会出异常
Vector vec=new Vector();
......
}
class B{
public void add(int i ){
...
}
.....
}
public static void main(String[] args){
A base=new A();
B a=new B();
B b=new B();
B c=new B();
base.vec.add(a);
base.vec.add(b);
base.vec.aad(c);
//下面是要比较的 取出base对象中的vector中的第一个元素,给他节点加1,但是还要保留一个原始的不加的,因为还要计算比较.这个声明我就不知道怎么写了.注释的是我最原来写的,改成下面这样写也不可以.不清除应该到底怎么改.
B temp1=new B();
B temp2=new B();
//B temp1=base.vec.get(0);
//B temp2=base.vec.get(0);
temp1.add(1);}
Vector base = new Vector(); base.add("0"); Vector a = (Vector) base.clone(); a.add("1"); System.out.println(base.size());
System.out.println(a.size());
}
下面是一个例子package com.qq.server;import java.util.Vector;public class Test2 {
public static void main(String[] args) {
Vector<B> base = new Vector<B>(); base.add(new B());
base.get(0).add(123); Vector<B> a = (Vector<B>) base.clone(); a.add(new B()); System.out.println(base.size());
System.out.println(a.size()); // 下面证明不用克隆每个对象
System.out.println(a.get(0).getArray().size());// 第一个 B 中的 array 有一个 new Integer(123)
System.out.println(a.get(1).getArray().size());// 第二个 B 中的 array 没有元素
}
}class B {
private Vector<Integer> array = new Vector<Integer>(); public Vector<Integer> getArray() {
return array;
} public void setArray(Vector<Integer> array) {
this.array = array;
} public B() { } public void add(int i) {
array.add(new Integer(i));
}
}