package test1;public class CloneTest1
{
public static void main(String[] args) throws Exception
{
Student s1=new Student();
s1.setName("zhangsan");
s1.setAge(20);
Student s2=new Student();
s2=(Student)s1.clone();
System.out.println("s1:"+s1.getName()+"\t"+s1.getAge());
System.out.println("s2:"+s2.getName()+"\t"+s2.getAge());
System.out.println("======================================");
s1.setName("lisi");
System.out.println("s1:"+s1.getName()+"\t"+s1.getAge());
System.out.println("s2:"+s2.getName()+"\t"+s2.getAge());
}
}class Student implements Cloneable
{
private int age;
private String name;
public Student()
{
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Object clone() throws CloneNotSupportedException
{
Object object=(Object)super.clone();
return object;
}
}
==============
看一个视频,讲师的意思这属于浅复制,可要是浅复制
经过这条语句:s1.setName("lisi");后
s2.getName()返回的还是"zhangsan"
{
public static void main(String[] args) throws Exception
{
Student s1=new Student();
s1.setName("zhangsan");
s1.setAge(20);
Student s2=new Student();
s2=(Student)s1.clone();
System.out.println("s1:"+s1.getName()+"\t"+s1.getAge());
System.out.println("s2:"+s2.getName()+"\t"+s2.getAge());
System.out.println("======================================");
s1.setName("lisi");
System.out.println("s1:"+s1.getName()+"\t"+s1.getAge());
System.out.println("s2:"+s2.getName()+"\t"+s2.getAge());
}
}class Student implements Cloneable
{
private int age;
private String name;
public Student()
{
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Object clone() throws CloneNotSupportedException
{
Object object=(Object)super.clone();
return object;
}
}
==============
看一个视频,讲师的意思这属于浅复制,可要是浅复制
经过这条语句:s1.setName("lisi");后
s2.getName()返回的还是"zhangsan"
解决方案 »
- berkeley db java使用
- arrayList<Ball>? 什么意思 有人知道吗?
- cardLayout 如何判断那个Label在最前面??
- 请教高手怎么遍历 HashSet,在线等
- 我编写的程序报这个错误,请大家帮助解决以下,不胜感激!!
- 获取磁盘目录
- 字符串转二进制
- 什么是J2SE,J2EE,J2ME? J2SE跟以前的j2sdk-1_3_0_01-win.exe 有什么不同? 请各位大虾详细解释一下,好吗?
- 请教JAVAY高手一个简单问题
- 一个关于JDBC的问题,用到SQL或Access 。一个初学者向各位师兄请教。
- 变成语言例如JAVA所有功能的实现都是基于操作系统的API吗?
- java多态。三个同样的子类,为什么另外两个能后期绑定,而第一个不行呢?
s2 = s1.clone(),执行后s2引用内存一个Student对象,这个对象的属性和s1所引用的对象的属性值(注意"值")是一样的.即s2的age是20,name是字符串池中的"zhangsan",这些和s1是一样的.
s2.setName("lisi")后s2所引用的对象的name属性变成"lisi",但s1对象的属性值没有变.
你可能忽略了一点:即便是浅复制,s1和s2也是不同的两个对象,还有一点就是字符串类型的对象是不可变对象.
是浅复制,不过String复制是调用String本身实现的Clone
看看浅复制的定义:被复制对象的所有变量都含有与原来的对象相同的值(注意是值),而所有的对其他对象的引用仍然指向原来的对象。
在调用s1.clone()之后,系统将重新生成一个Student对象,这个对象的age为20,name的引用为字符串常量“zhangsan”,这个引用指向的值跟s1一样。在调用了setname("lisa")之后,由于String常量的不可变性,将重新生成一个值为“lisa”的字符串常量,并且让s2的name指向“lisa”。所以s1的zhangsan还是zhangsan,并没用因为s2对name的改变而改变。