Object类中的toString和equal方法
2015-03-08 22:29
711 查看
Object类是一个特殊的类,是所有类的最高层,是所有类的超类。当一个类没有指定父类时,会默认继承Object类。
换句话说,所有的类都是由Object类衍生出来的,Object类中的方法适用于所有的类。这里简要的介绍几个方法。
------------------------------
首先来说toString方法,在打印对象时,会调用toString方法。比如说:
这里定义一个Car类的对象,然后直接打印这个对象,在打印的时候,会直接调用toString方法,等同于下列代码段:
如果在Car类定义的时候没有重写toString()方法,那么会默认调用Object中的方法,而Object中的toString方法的串组成形式如下:
所以,想要打印如符合自己心意的字符串时,必须要重写toString方法。
------------------------------
再来说一下equal方法,它也是Object中的一个方法。
一般当人们使用equal方法时,偏向于用来判定两个对象的值,或者是两个对象的内容是不是相同。但是Object内置的equal方法是直接使用“==”来实现的,用“==”比较的是内存地址,而不是内存中存放的内容。返回的是布尔值true或者是false。
所以,一般想要使用equal方法来比较对象的值的时候,一定要重写equal方法。
关于equal方法的重写问题,我们来看一个例子:
对比的过程中使用了if语句,这个if语句中,因为String是一个类,可以使用String类中的equal方法,(注意,String类中的equal方法已经在String类内部重写重写)而p1.age和p2.age是一个int的数据类型,直接使用“==”来判断即可,或者是把两个int数据类型采用包装类,包装成Integer类以后也可以使用equal方法。
将这个方法重写之后,可以进行一个测试,测试程序如下:
不过,为了保证可能使用到的容器HashSet或者HashMap,甚至是HashTable的准确性,一般需要在重写equals方法的同时,重写hashCode方法。举个例子,在类Account下重写hashCode方法和equals方法的代码段如下:
换句话说,所有的类都是由Object类衍生出来的,Object类中的方法适用于所有的类。这里简要的介绍几个方法。
------------------------------
首先来说toString方法,在打印对象时,会调用toString方法。比如说:
Car car = new Car(); System.out.println(car);//这里直接打印一个对象,其本质是调用这个对象中的toString()方法。
这里定义一个Car类的对象,然后直接打印这个对象,在打印的时候,会直接调用toString方法,等同于下列代码段:
Car car=new Car(); System.out.println(car.toString);//这里直接打印一个对象,其本质是调用这个对象中的toString()方法。
如果在Car类定义的时候没有重写toString()方法,那么会默认调用Object中的方法,而Object中的toString方法的串组成形式如下:
"getClass().getName() + "@" + Integer.toHexString(hashCode())"
所以,想要打印如符合自己心意的字符串时,必须要重写toString方法。
------------------------------
再来说一下equal方法,它也是Object中的一个方法。
一般当人们使用equal方法时,偏向于用来判定两个对象的值,或者是两个对象的内容是不是相同。但是Object内置的equal方法是直接使用“==”来实现的,用“==”比较的是内存地址,而不是内存中存放的内容。返回的是布尔值true或者是false。
所以,一般想要使用equal方法来比较对象的值的时候,一定要重写equal方法。
关于equal方法的重写问题,我们来看一个例子:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { Person p1 = this; if(obj instanceof Person){ Person p2 = (Person) obj; if(p1.name.equals(p2.name) && p1.age == p2.age){ return true; } else return false; } else{ return false; } } }这个Person类,定义了两个成员变量,分别是姓名和年龄,当我们想要比较两个Person对象的时候,一般是要比较两个对象中的某些成员变量是否相同,一般不会去比较两个对象的地址是不是相同,所以此时,重写的equal方法就很有意义。这重写的这个equal方法中,形参是一个Object对象,在内部判断传入对象为Person类之后,可以进一步进行对比。
对比的过程中使用了if语句,这个if语句中,因为String是一个类,可以使用String类中的equal方法,(注意,String类中的equal方法已经在String类内部重写重写)而p1.age和p2.age是一个int的数据类型,直接使用“==”来判断即可,或者是把两个int数据类型采用包装类,包装成Integer类以后也可以使用equal方法。
将这个方法重写之后,可以进行一个测试,测试程序如下:
public class CoverEquals { static Person p1 = new Person("zhangsan",18); static Person p2 = new Person("zhangsan",18); static Person p3 = new Person("lisi",20); public static void main(String[] args) { if(p1.equals(p2)){ System.out.println("p1 is equal with p2"); } else{ System.out.println("p1 is not equal with p2"); } if(p1 == p2){ System.out.println("p1 is '=' with p2"); } else{ System.out.println("p1 is not '=' with p2"); } if(p1.equals(p3)){ System.out.println("p1 is equal with p3"); } else{ System.out.println("p1 is not equal with p3"); } } }得到测试结果如下:
p1 is equal with p2 p1 is not '=' with p2 p1 is not equal with p3
不过,为了保证可能使用到的容器HashSet或者HashMap,甚至是HashTable的准确性,一般需要在重写equals方法的同时,重写hashCode方法。举个例子,在类Account下重写hashCode方法和equals方法的代码段如下:
public class Account { // 封装账户编号、账户余额两个Field private String accountNo; private double balance; // 下面两个方法根据accountNo来重写hashCode()和equals()方法 public int hashCode() { return accountNo.hashCode(); } public boolean equals(Object obj) { if(this == obj) return true; if (obj !=null && obj.getClass() == Account.class) { Account target = (Account)obj; return target.getAccountNo().equals(accountNo); } return false; } }
相关文章推荐
- object类的toString方法
- Object类以及子类的toString()方法的使用及重写
- Object类的toString方法
- equal(),hashcode(),toString()方法的作用
- equal(),hashcode(),toString()方法的作用
- Object类学习 equals() 方法和toString()方法覆写
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解
- 黑马程序员:Object类和equals、toString方法介绍
- java Object类中的toString方法
- Java自学笔记(第八天)-多态-instanceof关键字-equals方法-toString方法-object类-class类-
- 马士兵J2SE-第三章-面向对象-Object类:toString方法、equals方法、对象转型、抽象类抽象方法、final关键字、接口
- Object类的toString方法
- 34_Object类之toString方法.avi -
- Object类中toString方法
- 这样覆写Object类的toString方法对吗
- Object类的toString方法
- Object类中的equals与toString方法概述
- 第03章 面向对象 34 Object类之toString方法
- 关于equal和toString方法的实验报告
- 黑马程序员----Object类的eguals()和toString()方法