Object类
●介绍:
Object类是所有Java类的祖先(根基类),每个类都使用 Object 作为超类(父类),所有对象(包 括数组)都继承实现这个类的方法。
new int[10].hashCode(); //数组也继承Object类
如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
public class Person {...} 等价于: public class Person extends Object {...}
●常用方法:
1. toString方法
● Object类中义定有public String toString()方法,其返回值是 String 类型,描述当前对象的有关信息。当需要通过输出语句输出一个对象时,如System.out.println(person),将自动调用该对象类的 toString()方法,如果该类中没有重写toString(),那么默认调用Object类中的toString(),默认输出对象hashCode值。我们可以根据需要在用户自定义类型中重写toString()方法。
public class Person {
private String name ;
private int age;
public Person(){
}
public Person(String name, int age) {
= name;
this.age = age;
}
/*
* 当输出一个对象时会默认调用此对象的toString().
* 如果类中没有定义toString(),会调用Object类中toString(),
* Object类中toString()是吧对象在内存的哈希值返回(以16进制返回)
* 把对象信息通过字符串形式输出
*/
//重写toString()
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void main(String[] args) {
Person p1=new Person("小魏",18);
System.out.println(p1);
}
● 当我们重写toString方法后就可以把对象信息通过字符串形式输出了 。
(重写后的结果)
● 如果不重写的话会默认调用Object类中toString(),把对象在内存的哈希值返回(以16进制返回)。
(没重写的结果)
● 快速生成toString重写方法:
右键选择Generate,点击toString()即可。
2. equals方法
● boolean equals(Object obj) 判断两个对象是否相等
● Object类中的equals默认比较的是两个对象的地址是否相等, 我们就可以使用 == 代替它,在其他类中,一般都重写了equals(), 把它改造为比较对象中的内容是否相等
public class Test_2 {
public static void main(String[] args) {
Person p1 = new Person("小魏",16);
Person p2 = new Person("小魏",16);
System.out.println(p1==p2); //比较的是地址
System.out.println(p1.equals(p2)); //已经对equals方法进行了重写,使其比较的是两对象内容是否相等
}
}
● (Object 中的 equals 方法默认使用==比较,比较的是对象地址,这点需要注意 )
● 在Person类中对equals方法进行重写,使其比较的是对象中的内容是否相等
@Override
public boolean equals(Object obj) {
if(obj instanceof Person){
Person other =(Person)obj;
return name.equals() && age ==other.age;
}
return false;
}
● 关于 " == " :
“ == ” : 比较等号两边是否相等
● 当==用于基本类型比较时,比较的是变量的值是否相等。
● 当==用于引用类型比较时,比较的是对象的地址是否相等。
( JDK提供的一些类,如String,Date等,重写了Object的equals方法,调用这些类的equals方法, x.equals (y) ,当x和y所引用的对象是同一类对象且属性内容相等返回 true 否则返回 false )