在任意类的构造方法前有一个隐藏的访问父类的空参构造。
1.toString
public class Test{
public static void main(String[] args){
Object obj=new Object();
System.out.println(obj);
System.out.println(obj.toString());
}
}
运行后发现控制台上两个输出语句打印出的结果是一样的,那是为什么呢?我们需要重新认识一下输出语句。
打印的本质是在调用对象toString方法
默认情况下,因为Object类中的toString方法返回的是地址值,但是地址值对于我们是没有意义的,我想要看到对象内部的属性值该怎么办?
我们前面说到,当父类中的方法满足不了子类时,子类可以进行方法重写,因为Java中所有的类直接或间接地继承于Object类,因此我们这里可以重写Object类中的toString方法。
2.equals
public class Test{
public static void main(String[] args){
Student s1=new Student("张三",18);
Student s2=new Student("李四",19);
boolean result=s1.equals(s2);
System.out.println(result);
}
}
public class Student(
private String name;
private int age;
public Student(){};
public Student(){
this.name=name;
this.age=age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
@Override
public boolean equals(Object o){
if(this==o){
return true;
}
if(o==null||getClass()!=o.getClass()){
return false;
}
Student student=(Student)o; //向下强制类型转换
return age==student.age&&Object.equals(name,student.name);
}
)
3.clone
public class Test{
public static void main(String[] args) throws CloneNotSupportedException{
Student s1=new Student("lisi",18);
student s2=(Student)s1.clone();
System.out.println(s1.getName()+s1.getAge());
System.out.println(s2.getName+s2.getAge());
}
}
public class Student implements Cloneable(
private String name;
private int age;
public Student(){};
public Student(){
this.name=name;
this.age=age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
@Override
protected Object clone() throws CloneNotSupportedException{
return super.clone();
}
}
3.1浅克隆和深克隆
3.1.1浅克隆
3.1.2深克隆
我们知道深克隆对于基本数据类型是直接克隆,对于引用数据类型(除字符串)会在堆内存中重新创建一个区域,将新的地址赋给变量,而对于字符串类型,会先查看串池中是否有这样的字符串,如果有,那就复用(节省内存),如果没有,那就重新创建一个。
但是,Object类中的克隆默认是浅克隆,如果我们想要深克隆,应该怎么办?(我们可以重写Object类中的clone方法,在方法中创建一个新的数组,将其中的地址赋值给克隆出来的对象,达到地址值不一样,从而达到深克隆的目的)
在这里我们可以用Google公司发布的一个开放源代码的Java库,Gson(又称Google Gson),可以实现深克隆
2.8.0版本:百度云下载:百度网盘 请输入提取码 提取码:tn6j