简介
java.lang.Object 类是Java语言的根,即所有的父类
如果一个类没有指定继承或没有指定父类,那么默认继承Object类
Object类的两个主要方法
一、toString 方法
1、toString返回的字符串内容格式:类的全路径 @十六进制的地址值
2、直接打印其对象名,其实就是打印对象调用toString方法返回的字符串内容
像这样:
public static void main (String[] args) {
Object obj = new Object();
System.out.println(obj.toString());
System.out.println(obj);
}
输出结果:
java.lang.Object@7c30a502
java.lang.Object@7c30a502
打印的时候,不希望打印的地址值是这种形式的字符串,我们应该重写toString方法
比如这样:
public class Person {
String name;
int age;
@Override
public String toString () {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void main (String[] args) {
Person person = new Person("张三",18);
System.out.println(person);
System.out.println(person.toString());
}
输出结果:
Person{name='张三', age=18}
Person{name='张三', age=18}
二、toString的equals方法
public boolean equals(Object obj):指示其他某个对象是否于此“相等”
特点:
1.Object类的equals方法默认比较的是两个对象的地址值是否相等(==)
public static void main (String[] args) {
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1 == obj2); //比较的是地址值
System.out.println(obj1.equals(obj2)); //比较的是地址值
}
输出结果:
false
false
2.由于java中所有类都是继承Object类,所以类中没有equals方法,默认就是地址值比较
3.如果希望对象的内容比较,即
所有或指定的类的部分成员变量相同就判定两个对象是否相等,则可以重写equals方法
public class Person {
String name;
int age;
// 快捷键重写的equals方法 alt + insert
@Override
public boolean equals (Object o) {
// 如果两个对象的地址值相同,则直接返回true结束方法
if (this == o) return true;
// 如果传入的对象为null,就直接返回false,结束方法
// 如果两个对象的类习惯不一致,就直接返回false,结束方法
if (o == null || getClass() != o.getClass()) return false;
// 来到这里,说明两个对西安地址值不同,并且一定是Person类型
Person person = (Person) o;
// 比较所有属性是否相同
return age == person.age &&
Objects.equals(name, person.name);
}
}
重写以后在比较
public static void main (String[] args) {
Person p1 = new Person("张三",18);
Person p2 = new Person("张三",18);
System.out.println(p1 == p2); //比较的是地址值
System.out.println(p1.equals(p2)); //比较的是内容
}
输出内容:
false
true