publicclassObjectDemo{publicstaticvoidmain(String[] args){Object obj =newObject();String str1 = obj.toString();System.out.println(str1);//toString方法的结论//如果我们打印一个对象,想要看到属性值的话,那么就重写toString方法Student stu =newStudent("zxp",23);System.out.println(stu);}}publicStringtoString(){return"Student{name = "+ name +", age = "+ age +"}";}
publicclassObjectDemo1{publicstaticvoidmain(String[] args){Student stu1 =newStudent("zhangsan",23);Student stu2 =newStudent("zhangsan",23);boolean result = stu1.equals(stu2);System.out.println(result);//true//结论//1.如果没有重新equals方法,那么默认使用Object中的方法进行比较,比较的是地址值是否相等//2.重写之后比较的就是对象内部的属性值了}}
//1.创建对象int[] data ={1,2,3,4,5,6,7,8,9,10};User u1 =newUser(1,"zhangsan","0526","girl",data);//2.克隆对象/*细节方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去书写细节:1.重新Object中的clone方法2.让javabean类实现Cloneable接口3.创建原对象并调用clone就可以了*/User u2 =(User) u1.clone();int[] arr = u1.getData();arr[0]=100;System.out.println(u1);System.out.println(u2);
深克隆:基本数据类型拷贝过来,字符串复用,引用数据类型会重新创建新的 需额外重新clone方法
@OverrideprotectedObjectclone()throwsCloneNotSupportedException{//调用父类的clone方法//相当于让Java帮我们克隆一个对象,并把克隆之后的对象返回出去//深克隆//先把被克隆对象中的数组获取出来int[] data =this.data;//创建新的数组int[] newData =newint[data.length];//拷贝数组中的数据for(int i =0; i < data.length; i++){newData[i]= data[i];}//调用父类中的方法克隆对象User u =(User)super.clone();//因为父类中的克隆方法是浅克隆,替换克隆出来对象中的数组地址值u.data = newData;return u;}
五、Objects
方法名
说明
public static boolean equals(Object a ,Object b)
先做非空判断,比较两个对象
public static boolean isNull(Object obj)
判断对象是否为null,为null返回true ,反之false
public static boolean nonNull(Object obj)
判断对象是否为null,为null返回false ,反之true
publicclassObjectsDemo1{publicstaticvoidmain(String[] args){Student stu1 =null;Student stu2 =newStudent("zhangsan",23);boolean result =Objects.equals(stu1,stu2);System.out.println(result);//false/*1.方法的底层会判断stu1是否为null,为null则返回false2.如果stu1不为null,那么就利用stu1再次调用equals方法3.此时stu1是student类型,所以最终会调用student的equals方法如果没有重写,比较地址值,如果重写,比较属性值*/System.out.println(Objects.isNull(stu1));//trueSystem.out.println(Objects.isNull(stu2));//falseSystem.out.println(Objects.nonNull(stu1));//falseSystem.out.println(Objects.nonNull(stu2));//true}}