java中对象的两种创建方式
clone顾名思义就是复制,在java语言中,clone方法被对象调用,所以会复制对象。那么就要分配一个和源对象同样大小的空间,在这个空间中创建一个新的的对象。java中创建对象有以下两种方式。
1、使用new操作符创建一个对象
2、使用clone方法复制一个对象
那么使用这两种方法有什么区别呢?
接下来我们通过代码来找出不同:
1、new创建对象
Person p=new Person(23,"张三");
Person p1=p;
System.out.println(p);
System.out.println(p1);
执行语句Person p1=p;之后是创建了一个新的对象吗?看一下程序执行结果
ch3.引用的复制.Person@1b6d3586
ch3.引用的复制.Person@1b6d3586
可以看到打印之后的地址值是相同的,既然地址值是相通的,那么说明并没有创建一个新的对象,p和p1只是引用,它们都指向了一个相同的对象Person(23,“张三”),可以把这种现象叫做引用的复制,下面是内存的示意图:
2、使用clone方法复制一个对象
public class Person implements Cloneable {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public Person()
{
}
public int getAge()
{
return age;
}
public String getName()
{
return name;
}
@Override
public Object clone() throws CloneNotSupportedException {
return (Person)super.clone();
}
}
public class Test {
public static void main(String[] args) throws CloneNotSupportedException {
Person p=new Person(23,"张三");
Person p1=(Person) p.clone();
System.out.println(p);
System.out.println(p1);
}
}
程序打印结果:
ch3.引用的复制.Person@1b6d3586
ch3.引用的复制.Person@4554617c
从打印结果可以看出两个对象的地址是不同的,也就是说创建了一个新的对象,而不是把原对象的的地址赋值给一个新的引用变量了,接下来看内存示意图:
最后:本人也是新手,努力通过写博客提高自己,也想把知道的分享给大家,不足之处还望多多海涵!