Object类的eguals()和toString()方法
一,概念
Object类是所有对象的直接或者间接父类,“传说中的上帝”,该类中定义的肯定是所哟对象的功能。也就是说任意一个对象一旦建立,就具备Object类中的方法。
翻阅API文档发现有以下一些方法:
二、equal()方法
java规定所有的对象都具备比较比较性,都能比较俩对象是否相同,亦即所有对象都继承Object类。举例如下:
package xiaobing.study;
class Demo{//class Demo extends Object
}
public class ObjectDemo1 {
public static void main(String[] args){
Demo d1=new Demo();
Demo d2=new Demo();
Demo d3=d1;
System.out.println(d1==d2);
System.out.println(d1==d3);
System.out.println(d1.equals(d3));
}
}
以上代码就是实现了Object中的equal()方法。
当我们需要在自己的类中定义比较方法时,利用继承的思想,只要复写Object类中的比较方法,我们先写下面代码:
package xiaobing.study;
class Demo{//class Demo extends Object
private int num;
Demo(int num){
this.num=num;
}
public boolean equals(Object obj){
return this.num==obj.num;
}
}
public class ObjectDemo1 {
public static void main(String[] args){
Demo d1=new Demo();
Demo d2=new Demo();
Demo d3=d1;
System.out.println(d1==d2);
System.out.println(d1==d3);
System.out.println(d1.equals(d3));
}
}
package xiaobing.study;
class Demo{//class Demo extends Object
private int num;
Demo(int num){
this.num=num;
}
public boolean equals(Object obj){
return this.num==obj.num;
}
}
public class ObjectDemo1 {
public static void main(String[] args){
Demo d1=new Demo();
Demo d2=new Demo();
Demo d3=d1;
System.out.println(d1==d2);
System.out.println(d1==d3);
System.out.println(d1.equals(d3));
}
}
发现以上代码根本无法通过编译,这时由equals方法传入的对象类型为Object而这个类中不存在num,修改如下:
package xiaobing.study;
class Demo{//class Demo extends Object
private int num;
Demo(int num){
this.num=num;
}
public boolean equals(Object obj){//Object d=new Demo();
Demo d=(Demo) obj; //多态的应用
return this.num==d.num;
}
}
public class ObjectDemo1 {
public static void main(String[] args){
Demo d1=new Demo(4);
Demo d2=new Demo(5);
Demo d3=d1;
System.out.println(d1==d2);
System.out.println(d1==d3);
System.out.println(d1.equals(d3));
}
}
PS:以上实例是传入本类比较,当传入其他类时就需要应用instanceof关键字进行判断,如下:
package xiaobing.study;
class Demo{//class Demo extends Object
private int num;
Demo(int num){
this.num=num;
}
public boolean equals(Object obj){//Object d=new Demo();
if(obj instanceof Demo)//instanceof应用
return false;
Demo d=(Demo) obj;
return this.num==d.num;
}
}
class Person{
}
public class ObjectDemo1 {
public static void main(String[] args){
Demo d1=new Demo(4);
Demo d2=new Demo(5);
Person p=new Person();
System.out.println(d1.equals(p));
}
}
package xiaobing.study;
class Demo{//class Demo extends Object
private int num;
Demo(int num){
this.num=num;
}
public boolean equals(Object obj){//Object d=new Demo();
if(obj instanceof Demo)//instanceof应用
return false;
Demo d=(Demo) obj;
return this.num==d.num;
}
}
class Person{
}
public class ObjectDemo1 {
public static void main(String[] args){
Demo d1=new Demo(4);
Demo d2=new Demo(5);
Person p=new Person();
System.out.println(d1.equals(p));
}
}
三、toString()方法
java认为所有对象都可以变为字符串形式体现,只要通过toString()方法实现,代码如下:
package xiaobing.study;
class StringDemo{
}
public class ToStringDemo {
public static void main(String[] args){
StringDemo d1=new StringDemo();
System.out.println(d1.toString());
}
}