Java中实现栈时的问题----------Java高手请进

来源:百度知道 编辑:UC知道 时间:2024/05/23 10:59:22
Java中实现栈的时候我用的是LinkdeList类实现,代码如下
class myStack{
private LinkedList stackbody=new LinkedList();
public void push(Point point)
{
Point temp=new mypoint(); ///////////1
temp=point; ///////////2
stackbody.addFirst(temp);
}
public Object pop()
{
return stackbody.removeFirst();
}
}
不知道这样实现可以么,当我将点对象压入栈时为什么不正确啊。
如果我将注释为1、2的两行去掉可以么?

另外问下类的两个对象可以直接赋值么?
如Point p1=new Point();
Point p2=new Point();
p2=p1;//////假设此时p1已经初始化
很感谢你的建议,不过在实现时又碰到了点问题。麻烦问下,到底怎么实现Cloneable接口,并且怎么写Clone()方法。

p2=p1不是Point对象赋值,而是引用赋值。这和C++不一样。

在java里边,p1、p2、point和temp都是引用,而不是对象本身,引用就象C++的指针。上面的程序中,p2=p1的结果是,p2指向的对象和p1相同,他们都指向了p1=new Point()语句创建的对象。而Point p2=new Point(); 创建的对象,因为p2不再引用它而变成垃圾,java会自动删除。

java的引用赋值就象C++的指针赋值,就类似C++程序:
Point * p1=new Point();
Point * p2=new Point();
p2=p1;

所以你上面的程序也有这个问题,temp=point;其实没什么用,效果把Point temp=new mypoint(); 创建的对象删除了,被压栈的对象还是point,所以去掉这两句,效果完全一样。

如果你想复制一个新对象压栈,应该用java的clone方法,
temp=point.clone();
不过Point必须实现Clonable接口,并且正确实现它。