但是,当我用temp = Path;把path的值给了temp以后;我对temp进行一些删除,但是path里面的值也没了。
请问如何把path的值赋给temp,但是修改temp的时候不影响path。
6 个解决方案
#1
首先你 好像说反了,你这里的path本来就是null的,所以导致赋值之后temp和path都为null
如果想达到你要的效果,那么可以使用clone,深度克隆出来的对象改变其属性不会影响原来的对象,所以实现Cloneable接口就,重写clone方法就ok了
如果想达到你要的效果,那么可以使用clone,深度克隆出来的对象改变其属性不会影响原来的对象,所以实现Cloneable接口就,重写clone方法就ok了
#2
path哪有值? = 做对象的赋值就是指向那个对象,你实际修改的就是那个对象.如果你不象对那个对象进行修改的话就不应该用=号赋值.
如果这个对象可以被clone的话你应该将这个对象clone出来进行修改,这样就跟原对象没有关系了
如果这个对象可以被clone的话你应该将这个对象clone出来进行修改,这样就跟原对象没有关系了
#3
这个对象其实是个stack(堆栈) ,下面的是他的方法
public void push (T element);
public T pop();
public T peek();
public boolean isEmpty();
public int size();
public String toString();
temp和path都是堆栈,path里面放了数个int[],我把temp=path后;想对temp进行操作,判断里面数是否含有'123456'的数值。
但是每次使用pop()的方法后,temp就被清空了,同时path也被清空了,请问如何保留path的值?
(我猜想,temp=path后就是把两个对象关联上了,像指针一样。)
public void push (T element);
public T pop();
public T peek();
public boolean isEmpty();
public int size();
public String toString();
temp和path都是堆栈,path里面放了数个int[],我把temp=path后;想对temp进行操作,判断里面数是否含有'123456'的数值。
但是每次使用pop()的方法后,temp就被清空了,同时path也被清空了,请问如何保留path的值?
(我猜想,temp=path后就是把两个对象关联上了,像指针一样。)
#4
pop()就是每次把最上面的对象取出来,并从原来的stack中删除,
我用循环从temp中取值进行比较,取完值temp也空了,但是不知道为啥path也空了,请问如何保留path的值
我用循环从temp中取值进行比较,取完值temp也空了,但是不知道为啥path也空了,请问如何保留path的值
#5
你自己定义的每一个类都是引用类型,当一个实例复制给另一个实例的时候,就是你的temp=path,实际上是把path所指向的内存地址空间传递给了temp,所以当temp进行操作改变的时候,path也就发生了改变,因为两个变量好比一个房间的两把钥匙,无论谁用钥匙进去改变了房间中的物品,然后用另外一把钥匙进去看到的肯定是改变后的房间。
所以,对于引用类型,就要使用克隆赋值,即temp=path.clone();它标志着按照path所指向的地址房间,重新建造了一个一模一样的房间,并把钥匙给了temp。假设原来的path所指向的地址是1000000,那么temp就可能为1010000了。
不知道我这个解释你能不能明白。其实上面几位都解释得很正确了。
所以,对于引用类型,就要使用克隆赋值,即temp=path.clone();它标志着按照path所指向的地址房间,重新建造了一个一模一样的房间,并把钥匙给了temp。假设原来的path所指向的地址是1000000,那么temp就可能为1010000了。
不知道我这个解释你能不能明白。其实上面几位都解释得很正确了。
#6
正确应该是:
LinkedStack Path = new LinkedStack();
LinkedStack temp;
temp = Path.clone();
.......
LinkedStack Path = new LinkedStack();
LinkedStack temp;
temp = Path.clone();
.......
#1
首先你 好像说反了,你这里的path本来就是null的,所以导致赋值之后temp和path都为null
如果想达到你要的效果,那么可以使用clone,深度克隆出来的对象改变其属性不会影响原来的对象,所以实现Cloneable接口就,重写clone方法就ok了
如果想达到你要的效果,那么可以使用clone,深度克隆出来的对象改变其属性不会影响原来的对象,所以实现Cloneable接口就,重写clone方法就ok了
#2
path哪有值? = 做对象的赋值就是指向那个对象,你实际修改的就是那个对象.如果你不象对那个对象进行修改的话就不应该用=号赋值.
如果这个对象可以被clone的话你应该将这个对象clone出来进行修改,这样就跟原对象没有关系了
如果这个对象可以被clone的话你应该将这个对象clone出来进行修改,这样就跟原对象没有关系了
#3
这个对象其实是个stack(堆栈) ,下面的是他的方法
public void push (T element);
public T pop();
public T peek();
public boolean isEmpty();
public int size();
public String toString();
temp和path都是堆栈,path里面放了数个int[],我把temp=path后;想对temp进行操作,判断里面数是否含有'123456'的数值。
但是每次使用pop()的方法后,temp就被清空了,同时path也被清空了,请问如何保留path的值?
(我猜想,temp=path后就是把两个对象关联上了,像指针一样。)
public void push (T element);
public T pop();
public T peek();
public boolean isEmpty();
public int size();
public String toString();
temp和path都是堆栈,path里面放了数个int[],我把temp=path后;想对temp进行操作,判断里面数是否含有'123456'的数值。
但是每次使用pop()的方法后,temp就被清空了,同时path也被清空了,请问如何保留path的值?
(我猜想,temp=path后就是把两个对象关联上了,像指针一样。)
#4
pop()就是每次把最上面的对象取出来,并从原来的stack中删除,
我用循环从temp中取值进行比较,取完值temp也空了,但是不知道为啥path也空了,请问如何保留path的值
我用循环从temp中取值进行比较,取完值temp也空了,但是不知道为啥path也空了,请问如何保留path的值
#5
你自己定义的每一个类都是引用类型,当一个实例复制给另一个实例的时候,就是你的temp=path,实际上是把path所指向的内存地址空间传递给了temp,所以当temp进行操作改变的时候,path也就发生了改变,因为两个变量好比一个房间的两把钥匙,无论谁用钥匙进去改变了房间中的物品,然后用另外一把钥匙进去看到的肯定是改变后的房间。
所以,对于引用类型,就要使用克隆赋值,即temp=path.clone();它标志着按照path所指向的地址房间,重新建造了一个一模一样的房间,并把钥匙给了temp。假设原来的path所指向的地址是1000000,那么temp就可能为1010000了。
不知道我这个解释你能不能明白。其实上面几位都解释得很正确了。
所以,对于引用类型,就要使用克隆赋值,即temp=path.clone();它标志着按照path所指向的地址房间,重新建造了一个一模一样的房间,并把钥匙给了temp。假设原来的path所指向的地址是1000000,那么temp就可能为1010000了。
不知道我这个解释你能不能明白。其实上面几位都解释得很正确了。
#6
正确应该是:
LinkedStack Path = new LinkedStack();
LinkedStack temp;
temp = Path.clone();
.......
LinkedStack Path = new LinkedStack();
LinkedStack temp;
temp = Path.clone();
.......