请教一下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是没有用的,谁能帮我解释下啊
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是没有用的,谁能帮我解释下啊
{
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空间是不同的。