Object
概念:
Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份
toString:
作用:
以良好的格式,更方便的展示对象中的属性值
重写toString方法的方式可以打印属性值,否则就是继承Object的方法,打印的是内存地址
在类的空白区域,右键 -> Generate -> 选择toString
代码演示:
package api.obj;import java.util.Objects;public class Student {private String name;private int age;public Student(){}public Student(String name, int age) {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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}/**equals也是需要重写的否则就算是调用也是用的object的equals,在源码里object的equals是用的==,所以比较的还是内存地址,要想比较属性值就要重写*/@Overridepublic 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 && Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}
public class Demo01 {public static void main(String[] args) {Student s1 = new Student("bbb",11);Student s2 = new Student("bbb",11);System.out.println(s1.equals(s2));System.out.println(s1 == s2);/**直接打印对象控制台是打印的地址值:day13.Student@4c203ea1通过源码跟进看到,println调用了valueOf,valueOf调用了toString方法,获取包名+类名+@+地址值然后再返回给println方法public String toString () {return getClass().getName() + "@" + Integer.toHexString(hashCode());}Student没有写toString方法,但是所有的类都默认继承了Object类,所以可以使用Object的toStrinig方法但是拿到这个地址值没什么卵用,所以这里就涉及到了重写,放父类的方法不能满足子类时,就可以重写该方法,在子类有该方法后,调用时会采用就近原则使用子类的,而不去调用Object的toString方法,重新以后就不是地址值了,就是打印的属性值*/System.out.println(s1); }
}
equals:
作用:
用于对象之间的比较,返回true和false的结果
重写equals方法的场景
不希望比较对象的地址值,想要结合对象属性进行比较的时候。
代码演示:
public static void main(String[] args) {String s1 = "abc";StringBuilder sb = new StringBuilder("abc");//1.此时调用的是String类中的equals方法,String类重写了toString,但源码会判断是不是一个字符串类型,不是的话直接返回falseSystem.out.println(s1.equals(sb)); // false//StringBuilder类中是没有重写equals方法,用的就是Object类中的==System.out.println(sb.equals(s1)); // false}
Objects:
概念:
用于操作对象或在操作前检查某些条件,可以处理一些空值
常用方法:
方法名 | 说明 |
---|---|
public static String toString(对象) | 返回参数中对象的字符串表示形式。 |
public static String toString(对象, 默认字符串) | 返回对象的字符串表示形式。 |
public static Boolean isNull(对象) | 判断对象是否为空 |
public static Boolean nonNull(对象) | 判断对象是否不为空 |
代码演示:
public static void main(String[] args) {// public static String toString(对象): 返回参数中对象的字符串表示形式。// 调用的是对象的toString,如果对象中没有就调用objectStudent s = new Student("itzhuzhu", 23);String result = Objects.toString(s);System.out.println(result);// public static String toString(对象, 默认字符串): 返回对象的字符串表示形式。如果对象为空,那么返回第二个参数.Student s2 = new Student("itzhuzhu", 23);Student s3 = null;String result2 = Objects.toString(s3, "随便写一个");System.out.println(result2);// public static Boolean isNull(对象): 判断对象是否为空Student s4 = null;Student s5 = new Student();System.out.println(Objects.isNull(s4)); // trueSystem.out.println(Objects.isNull(s5)); // false// public static Boolean nonNull(对象): 判断对象是否不为空Student s6 = new Student();Student s7 = null;System.out.println(Objects.nonNull(s6));// truSystem.out.println(Objects.nonNull(s7));// false}