java中的交换问题

lingkeylbh 2006-08-19 08:56:36
请教一下java里的两个对象引用的交换是怎么实现的,C++里面的地址参数和java中的引用不一样吗?
class Person{
public String name;
public int age;
public Person(String tname ,int tage)
{
this.name = tname;
this.age = tage;
}
public Person(Person p)
{
this.name = p.name;
this.age = p.age;
}

public static void swap(Person p1,Person p2)
{
Person temp = p1;
p1 = p2;
p2 = temp;

}

public String toString()
{
StringBuffer strbuf = new StringBuffer();
strbuf.append(name).append(" ").append(age);
return strbuf.toString();

}
}

public class Swap {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person("ling",20);
Person p2 = new Person("lang",25);
Person.swap(p1,p2);
System.out.println(p1);
System.out.println(p2);

}

}
我里面的swap是没有用的,谁能帮我解释下啊
...全文
197 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimshen 2006-08-19
  • 打赏
  • 举报
回复
因为main里边的p1,p2是单向传递给swap里边的p1,p2的,因此一定要在swap里边交换的话只能考虑修改所指向对象的内容
lingkeylbh 2006-08-19
  • 打赏
  • 举报
回复
那应该怎么写才能交换呢
jimshen 2006-08-19
  • 打赏
  • 举报
回复
public Person(Person p)
{
this.name = p.name;
this.age = p.age;
}
这个是模仿C++里边的拷贝构造函数?这个name是String对象的引用,相当于C++里边的指针,应该用深拷贝,浅拷贝有问题的。如果根据一个已存在的对象去复制一个拷贝,应该在类中实现Clonable接口,改写clone方法。

public static void swap(Person p1,Person p2)
{
Person temp = p1;
p1 = p2;
p2 = temp;
}
同样的,这里p1,p2,temp都是引用变量,这里虽然交换了p1和p2的指向,但是main里边的p1和p2不受影响。尽管传的是地址,但是main和swap里边的p1、p2空间是不同的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧