Object类的作用:
- 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类
- Object作为所有类的父类,提供了很多常用的方法给每个子类对象拿来使用。
Object类的常用方法:
Object的toString方法:
代码演示如下:
学生类:
public class Student { private String name; private char sex; private int age; public Student() { } public Student(String name, char sex, int age) { this.name = name; this.sex = sex; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
测试类:
public class Test1 { public static void main(String[] args) { Student s = new Student("鸟儿",'男',21); String rs = s.toString(); System.out.println(rs.toString()); //直接输出对象变量,默认可以省略toString调用不写的 System.out.println(s); } }
运行结果如图:
看到运行结果发现,写了toString和没有写没区别。
问题引出
- 开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
- 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。
toString存在的意义
- 父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!
重写的方式可以通过Generate导入,也可以通过快捷键 toS 直接重写。
Object的equals方法:
代码演示如下:
这里直接写测试类,学生类和上面的学生类一样
public class Test1 { public static void main(String[] args) { Student s1 = new Student("鸟儿",'男',21); Student s2 = new Student("鸟儿",'男',21); //equals默认是比较2个对象的地址是否相同。 System.out.println(s1.equals(s2));// false System.out.println(s1 == s2);// false } }
问题思考:
- 直接比较两个对象的地址是否相同完全可以用“==”替代equals。
- 同时,开发中很多业务情况下,更想判断2个对象的内容是否一样。
equals存在的意义
- 为了被子类重写,以便子类自己来定制比较规则(比如比较对象内容)。
重写方式直接Generate导入。
Objects概述
- Objects是一个工具类,提供了一些方法去完成一些功能。
官方在进行字符串比较时,没有用字符串对象的equals方法,而是选择了Objects方法来比较。
System.out.println(s1.equals(s2));// true 但留下了隐患,可能出现空指针异常
System.out.println(Objects.equals(s1,s2));//true 更安全 结果也是对的
使用Objects的equals方法在进行对象的比较会更安全。
System.out.println(s1 == null);//false
System.out.println(Objects.isNull(s1));//false