Object类中的toString和equal方法
来源:互联网 发布:java实验指导书答案 编辑:程序博客网 时间:2024/04/19 12:14
Object类是一个特殊的类,是所有类的最高层,是所有类的超类。当一个类没有指定父类时,会默认继承Object类。
换句话说,所有的类都是由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;}@Overridepublic 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{// 封装账户编号、账户余额两个Fieldprivate 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和equal方法
- Object类 和 toString方法
- 重写toString和equal方法
- object中的toString方法
- java Object类中的toString方法
- (32)Object类中的toString()方法
- Object 类中 equals和toString() 方法
- Object 类中 equals和toString() 方法
- Object类的toString()和equals()方法
- Object类--toString方法
- Object类-toString方法
- Object类----toString方法
- 黑马程序员---Object 中toString()与equal()方法
- 继承中的构造方法,object类,toString类,equals方法
- 【Java】Java中的instanceof,Object类,equals()方法,toString()方法
- Object类中的equals与toString方法概述
- 如何覆盖Object类中的equals(),hashCode(),toString()方法
- Object类中的toString(),equals(), hashCode()方法之间的关系
- leetCode #6 ZigZag Conversion
- KNN算法及R语言实现
- Linux内核分析 第一次作业
- 不借助第三个量,交换两个量的值
- js事件的监听器的使用
- Object类中的toString和equal方法
- 选机房(贪心模拟)
- 基于SVN + Maven的构建发布Demo之二——解决回滚问题
- 搜索引擎倒排索引表压缩:gamma编码
- Linux显示邮件状态等信息
- 递归四条基本法则
- #include <sys/types.h>的作用
- HDU 3631 Shortest Path (Floyd的深层理解)
- Linux程序设计(Linux shell编程八)