Object类
Object类
是所有类的父类,如果一个类没有显式地继承类,则默认父类Object
例如,下面这个两个类的定义相等
class God{}
class God extends Object{}
Object中方法
例如
public String toString() 返回描述该对象的字符串
public Boolean equals(Object o) 比较两个对象是否相等
public int hashCode() 返回对象的哈希值
toString方法
返回输入的字符串属于的类名、内存地址。
结果格式:
该对象所属的类名@内存地址(十六进制)
例
package test1;
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
public class Class1 {
public static void main(String[] args){
Person o = new Person("XiaoMing",18);
System.out.println(o.toString());
System.out.println(o);
//从结果中发现,直接打印对象和打印toString()的返回值相同,
}}
test1.Person@3ac3fd8b
test1.Person@3ac3fd8b
重写toString()
对象的输出一定会调用Object类中的toString()方法
通常,重写这个方法,来返回对象的具体的信息
public String toString(){
return "Person[name=" + name + ", age =+ age +""]";
}
package test1;
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
//在Person类中修改
public String toString(){
return "Person [ name = " + name + ", age = " + age + " ] ";
}
}
public class Class1 {
public static void main(String[] args){
Person o = new Person("XiaoMing",18);
System.out.println(o.toString());
System.out.println(o);
//结果再次一致 —— 程序调用的是,重写后的toString()
}}
Person [ name = XiaoMing, age = 18 ]
Person [ name = XiaoMing, age = 18 ]
这是多态机制
equals()方法
测试两个对象是否相等
package test1;
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
//自定义比较方法,用于检查两个引用变量是否指向同一对象ai
public boolean myEquals(Object o ){
return (this == o);
}
}
public class Class1 {
public static void main(String[] args){
Person o1 = new Person("ZhangSan",18);
Person o2 = new Person("ZhangSan",18);
//调用对象的equals方法
System.out.println(o1.equals(o2));
//调用自定义的myEquals方法
System.out.println(o1.myEquals(o2));
/
}}
false
false
//
结果
equals()方法与定义的方法直接使用 == 结果相同
因为,equals()默认实现就是: 用==运算符检测两个引用变量是否指向同一对象,即比较的是地址。
如果要检测两个不同对象的内容是否相同——重写equals(方法)
例如,String类中的equals()方法继承自Object类并且重写
是指能够检验两个字符串的内容是否相等
修改Person 类 添加重写的equals()
例
package test1;
class Person{
private String name;
private int age;
//创建构造方法,要输入两个参数,有name、age
public Person(String name,int age){
this.name = name;
this.age = age;
}
public boolean equals(Object o) {
if(this == o)
return true;
if(!(o instanceof Person))
return false;
Person p = (Person) o;
//一个个地比较属性 看是否相等
if(((null == name && null == p.name)||(null != name && name.equals(p.name)))&& age == p.age)
{return true;}
return false;
}
//自定义比较方法,用于检查两个引用变量是否指向同一对象ai
public boolean myEquals(Object o ){
return (this == o);
}
}
public class Class1 {
public static void main(String[] args){
Person o1 = new Person("ZhangSan",18);
Person o2 = new Person("ZhangSan",18);
//调用对象的equals方法
System.out.println(o1.equals(o2));
//调用自定义的myEquals方法
System.out.println(o1.myEquals(o2));
}}
true
false
在Person类中重写了equals()方法:首先按比较地址是否相等,如果相等,就是同一对象
因为equals的形参是Object类型,所以可以接受任何对象。。
帮助判断对象是否是Person的实例,如果是,一次比较各个属性
---------------------------
“朝着一个既定的方向去努力,就算没有天赋,在时间的积累下应该也能稍稍有点成就吧。”