Object+克隆的第三方工具


package com.mao.one; public class ObjectDemo01 { public static void main(String[] args) { //1.toString Object obj = new Object(); String str1 = obj.toString(); System.out.println(str1); Student student = new Student(); String str2 = student.toString(); System.out.println(str2); //细节: //System:类名 //out:静态变量 //System。out:获取打印对象 //println():方法 //参数:表示打印的内容 //核心逻辑 //当我们打印一个对象时,底层会调用对象的toString方法,把对象变成字符串 //然后 打印在控制台上 打印完后进行换行处理 System.out.println(student); } }
package com.mao.one; public class ObjectDemo02 { public static void main(String[] args) { //2.equals Student s1 = new Student("zhangsan",23); Student s2 = new Student("zhangsan",23); boolean result = s1.equals(s2); System.out.println(result); //1.如果没有重写equals方法,那么 默认使用Object中的方法进行比较,比较的是地址值是否相等 //2.一般来讲地址值对于我们意义不大,所以我们会重写,重写之后比较的是对象内部的属性值了 //练习:大厂面试题 String s = "abc"; StringBuilder sb =new StringBuilder("abc"); System.out.println(s.equals(sb));//false //因为equalse方法是被s调用,s是字符串 //所以equals要看的是String中的equals //字符串中的equals方法,先判断参数是否是字符串 //如果是字符串,在比较内部属性 //如果不是字符串,直接返回false System.out.println(sb.equals(s));//false //因为equalse方法是被sb调用,sb是StringBuilder //所以equals要看的是StringBuilder中的equals //StringBuilder中没有重写equals方法,使用的是Object中的 //在Object中默认使用的是==来比较两个对象的地址值 //而s和sb记录的地址值是不一样的,所有结果返回false } }
对象克隆:

package com.mao.one;
import java.util.StringJoiner;
//Cloneable
//如果一个接口中没有抽象方法
//表示当前的接口是一个标记性的接口
//现在Cloneable表示一旦实现,那么当前类的对象就可以被克隆
//如果没实现,当前类的对象就不能被克隆
public class User implements Cloneable{
private int id;
private String username;
private String password;
private String path;
private int[] data;
public User() {
}
public User(int id, String username, String password, String path, int[] data) {
this.id = id;
this.username = username;
this.password = password;
this.path = path;
this.data = data;
}
/**
* 获取
* @return id
*/
public int getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
* @return password
*/
public String getPassword() {
return password;
}
/**
* 设置
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取
* @return path
*/
public String getPath() {
return path;
}
/**
* 设置
* @param path
*/
public void setPath(String path) {
this.path = path;
}
/**
* 获取
* @return data
*/
public int[] getData() {
return data;
}
/**
* 设置
* @param data
*/
public void setData(int[] data) {
this.data = data;
}
public String toString() {
return "User{id = " + id + ", username = " + username + ", password = " + password + ", path = " + path + ", data = " + arrToString()+ "}";
}
public String arrToString(){
StringJoiner sj = new StringJoiner(",","[","]");
for (int i = 0; i < data.length; i++) {
sj.add(data[i]+" ");
}
return sj.toString();
}
@Override
protected Object clone() throws CloneNotSupportedException {
//调用父类中的clone方法
//相当于让java帮我克隆一个对象,并把克隆的对象返回
return super.clone();
}
}
public String toString() { return "User{id = " + id + ", username = " + username + ", password = " + password + ", path = " + path + ", data = " + arrToString()+ "}"; } public String arrToString(){ StringJoiner sj = new StringJoiner(",","[","]"); for (int i = 0; i < data.length; i++) { sj.add(data[i]+" "); } return sj.toString(); } }
package com.mao.one; public class ObjectDemo03 { public static void main(String[] args) throws CloneNotSupportedException { //clone //1.创建一个对象 int[] data = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}; User u1 = new User(1,"zhangsan","1234","gril",data); //2.克隆对象 //1.方法在底层会帮我们创界一个数据,并把原对象中的数据拷贝过去 //2.重写Object中的clone方法 //要让Javabean 去实现 Cloneable 接口 //3.创建原对象,并调用clone方法 User u2 = (User) u1.clone(); System.out.println(u1); System.out.println(u2); } }



package com.mao.one; import com.google.gson.Gson; public class ObjectDemo03 { public static void main(String[] args) throws CloneNotSupportedException { //clone //1.创建一个对象 int[] data = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}; User u1 = new User(1,"zhangsan","1234","gril",data); //2.克隆对象 //1.方法在底层会帮我们创界一个数据,并把原对象中的数据拷贝过去 //2.重写Object中的clone方法 //要让Javabean 去实现 Cloneable 接口 //3.创建原对象,并调用clone方法 User u2 = (User) u1.clone(); //验证一件事:Object中的克隆是浅克隆 正确 int[] arr = u1.getData(); arr[0] = 100; System.out.println(u1); System.out.println(u2); //第三方的工具 //1.第三方写的代码导入到项目中 //2。编写代码 Gson gson = new Gson(); //把对象变成字符串 String s = gson.toJson(u1); //再把字符串变回对象 User user = gson.fromJson(s, User.class); System.out.println(user); } }


package com.mao.one; import java.util.Objects; public class ObjectsDemo01 { public static void main(String[] args) { Student s1 = null; Student s2 = new Student("zhangsan ",23); boolean result = Objects.equals(s1, s2); System.out.println(result); //1.方法的底层会判断s1是否为null,如果是null ,直接返回false //2.如果s1不为null,那么就利用s1再次调用equals方法 //3.此时s1是Student,所以最终还是会调用Student中的equals方法 //如果没有重写,比较地址值 ,如果重写了 ,比较属性值 Student s3 = new Student(); Student s4 = null;//true System.out.println(Objects.isNull(s3));//false System.out.println(Objects.isNull(s4));//true System.out.println(Objects.nonNull(s3));//false System.out.println(Objects.nonNull(s4));//true } }

浙公网安备 33010602011771号