28.1 api-- Object(toString equals)
/*
* String toString() : 返回该对象的字符串表示
* return getClass().getName() + "@" + Integer.toHexString(hashCode());
* getClass():返回一个字节码对象
* Integer.toHexString():返回指定参数的十六进制字符串形式
* hashCode():返回该对象的哈希码值(内部地址)
*
* boolean equals(Object obj)
*
* 重建Object的toString方法快捷方式:鼠标右键Generate---toString
* 查看toString源码:ctrl+点击toString
*/
public class Object_toString_Demo { public static void main(String[] args) { day d = new day(); System.out.println(d);//不写默认执行对象的toString方法 System.out.println(d.toString());//toString方法对我们没有意义,需要重新方法。 //查看源码:ctrl+点击toString Student s = new Student(); s.name = "aa"; s.age = 12; System.out.println(s);//不写默认执行对象的toString方法 System.out.println(s.toString()); } } class day {//所有的类都默认继承的Object类,如果继承了指定类就使用其他类(总会有一个父类没有继承,它就继承Object) int time; } //重建Object的toString方法快捷方式:鼠标右键Generate---toString class Student extends Object { String name; int age; @Override public String toString() { return "student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
输出
二、equals 案例
/*
* boolean equals(Object obj)
* 使用==来比较两个对象是否相等,则比较地址值是否相等
*
*可以重写equals方法来对比两个对象是否一样(不是比地址值,而是比我们设定的比较姓名、年龄)。
*重建Object的equals方法快捷方式:鼠标右键Generate---equals
*/
public class Object_Equals_Demo { public static void main(String[] args) { Student2 s = new Student2(); Student2 s2 = new Student2(); boolean flag = s.equals(s2); System.out.println(s + "| |" + s2 + "| |" + flag); } } class Student2 { String name; int age; }
输出
方法重建
package day28_api.object; import java.util.ArrayList; import java.util.Objects; /* * boolean equals(Object obj) * 使用==来比较两个对象是否相等,则比较地址值是否相等 * * 可以重写equals方法来对比两个对象是否一样(不是比地址值,而是比我们设定的比较姓名、年龄)。 */ public class Object_Equals_Demo { public static void main(String[] args) { Student3 s3 = new Student3("aa",12); Student3 s4 = new Student3("aa",12); // boolean flag2 = s3.equals(new ArrayList<>()); //检查两边类型是否一样(class) boolean flag2 = s3.equals(s4); System.out.println(s3 + "| |" + s4 + "| |" + flag2);//此时equals方法比较的不是地址值,而是重写的方法(比较姓名、年龄) } } class Student3 { String name; int age; //有参构造方法 public Student3(String name,int age) { this.name = name; this.age = age; } // @Override // public boolean equals(Object o) { // Student3 nextstudent = (Student3) o; // // if(!this.name.equals(nextstudent.name)) { // return false; // } // // if(this.age != nextstudent.age) { // return false; // } // return true; // } @Override public boolean equals(Object o) { //提高效率 当前对象和传递进来的对象地址值一样,则不用比较成员 if (this == o) return true; //提高代码的健壮性 if (o == null || getClass() != o.getClass()) return false; //向下转型 Student3 student3 = (Student3) o; //&&两边都成立true,有一边不成立则false return age == student3.age && Objects.equals(name, student3.name); }
//重写该方法可以让地址也匹配
// @Override
// public int hashCode() {
//
// return Objects.hash(name, age);
// }
}
输出
取消hashcode重新的注释