Object类
介绍
java. lang .object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是0bject,
如果一一个类没有特别指定父类,那么默认则继承自0bject类。 例如:
public class MyClass /*extends Object*/ {
...
}
public String toString()
返回该对象的字符串表示。
下面Person类默认继承了bject类,所以可以使用object类中的tostring方法
string tostring() 返回该对象的字符串表示。
基础操作:直接toString会弹出这个重写方法
/*
直接打印对象的地址值没有意义需要重写object类的tostring方法
打印对象的属性(name, age)
*/
@override
public String tostring()
return " abc"
}
进阶操作:alt+insert 选择toString()
@verride
public string tostring() {
return "Person{" +
"name-”” + name +" \'” +
",age-"+ age +
'}';
}
看一个类是否重写了tostring方法直接打印这个类对应对象的名字即可如果没有重写tostring方法,那么打印的就是对象的地址值(默认)
如果重写tostring方法,那么就按照重写的方式打印
bublic boolean eauals(obiect obj)
指示其他某个对象是否与此对象“相等”.
下面Person类默认继承了object类,所以可以使用object类的equals方法
boolean equals(object obj)指示其他某个对象是否与此对象“相等”。
Person类封以继序了object类,所以可以使用object类的equals万法
boolean equals(object obj) 指示其他某个对象是否与此对象“相等”。
Object类equals方法的源码:
public boolean equals(Object obj) {
return (this — obj);
参数:
object obj :可以传递任意的对象
方法体:
- :比较运算符。返回的就是一个布尔值true, false
基本数据类型:比较的是值
引用数据类型:比较的是两个对象的地址值
this是谁?那个对象调用的方法,方法中的this就是那个对象;p1调用的equals方法,所以this就是P1
bj是谁?传递过来的参数p2
thisobj —》p1p2
基础操作:直接equals会弹出这个重写方法
/*
object类的equals方法默认比较的是两个对象的地址值,没有意义
所以我们需要重写equals方法,比较两个对象的属性值(name, age)
对象的属性值一样好,返回true;否则返回false
问题:
隐含着一个多态
Object obj二p2 = new Person(“古力哪扎”, 18);
多态弊端:无法使用子类特有的内容(属性,方法)
解决:可以使用向下转型(强转)把object类型转换为Person
*/
@Override
if(obj instanceof Person){
//使用向下转型(强转)把objec t类型转换为Person
Person p = (Person )obj;
//比较两个对象的属性;一个是调用方法的this(p1),-个就是p(0bj=p2)
boolean b = this.name.equals(p.name) && this .age==p.age;
return b;
//不是Person类型直接返回false
return false;
}
进阶操作:alt+insert 选择equals() and hashcode() 选择java7+版本
@Override
public boolean equals(Object o) {
if (this == 0) return true ;
if (o == null || getclass() ==o.getClass()) return false;
Person person = (Person) 0;
return age == person.age &&
objects . equals(name, person.name);
}
@Override
public int hashCode() {
int result = name != nu1l ? name.hashCode() : 0;
result = result + age;
return result;