Object类之toString方法和equals方法
2018-04-06 21:27
726 查看
Object类之toString方法和equals方法
位于rt.jar\java\lang\Object.class注意:Object类是所有类的父类(Java中只有一个根基类,C++中有多个),若没有明确使用extends关键字明确表示该类继承哪个类,那么它就默认继承Object类,也就可以使用Object中的方法:
所有对象,包括数组,都实现了Object类的方法。
我们写的所有的类都是Object的子类会继承Object这个类所有的属性和所有的方法:
1) Object中有3个非常重要的方法 hashcode(), toString(), equals(),sun都是建议我们写自己的类的时候,最好都重写上述3个方法
1.toString()方法
描述对象的方法,用一个文本信息来描述当前对象 ,一般是把属性显示出来.默认调用toString方法的时候,返回的结果:
包名.类名@hashcode;
必须重写该方法
当输出对象的名字的时候,系统就会默认去调用
toString()方法
Object a = new Object(); String b = a.toString();//获得一个对象的字符串,表示形式是一个地址 System.out.println(b);
輸出:java.lang.Object@6d06d69c
类名(对象是该类的一个实列)+@+此对象哈希码的无符号十六进制
2 “==”与equals()
a) “==” : 比较的是基本数据类型的对象,是否相等eg : Person p1 = new Person(); Person p2 = new Person(); System.out.println(p1==p2);//false
p1==p2 :比較的是内存地址值,不相等
- b) “equals”:是sun专门用来判断两个对象属性是否相等
方法
3 equals():
a) equals()为什么需要重写?默认的是比较两个对象的引用是否是同一地址
重写equals()方法后,让他们指向同一个引用,可以判断对象的属性相等
@Override public boolean equals(Object obj) { //参数的特殊情况 //null, this, 类型不一致 if(obj==null) return false; if(obj==this) return true; if(!(obj instanceof Point)) return false; Point p = (Point) obj; return x == p.x && y == p.y; }
4000
String s1 =p1.toString();//获得一个对象的字符串,toString()已被重写 System.out.println(s1); Object a = new Object(); String b = a.toString();//获得一个对象的字符串,表示形式是一个地址 System.out.println(b); Point p2 = new Point(3,4); String s2 = p2.toString(); System.out.println(s2); /**重写equals()方法后,输出p1==p2:false,p1.equals(p2):true*/ System.out.println(p1==p2);//==比较的是对象内存地址 -false System.out.println(p1.equals(p2)); //重写equals方法后,它比较的是对象内部属性-true
重写equals()方法后,输出p1==p2:false,p1.equals(p2):true
4 hashCode():
a)hashCode:创建对象在堆内存中的地址值经过一系列非常复杂的算法转化而来的一组数字,对开发来说无意义
b)如果两个对象相等话,
第1个条件:equals返回的结果必须是true
第2个条件:必须要有相等的hashCode
c)如果两个对象不相等,则hashCode值一定不等
d)判断对象是否相等的时候,必须要重写equals和
hashCode
5instanceof
判断一个对象是否是某个类的对象格式: 对象 instanceof 类名
如果是返回true,否则false
if(obj instanceof Point){
Point p = (Point) obj;
Object类中的toString(),equals(), hashCode()方法之间的关系
1、在没有重写之前:1) toString()方法返回的是对象的:Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + ‘@’ + Integer.toHexString(hashCode()) 比如:com.itheima.hah.Dog@2260e277
2) equals():对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)克隆的对象和原来的对象不是同一个对象。对象地址不一样
3) hashCode():由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的)。
2、重写之后:
1) toString()方法一般返回的是:属性的拼接
@Override
public String toString() {
return “Person2 [name=” + name + “, age=” + age + “]”;
}
2) equals()方法:重写之后一般只要自定义为两个对象的所有属性值相等就返回为true;
3) hasdCode():重写hashCode,
@Override
public int hashCode()
{
final int PRIME = 31;
int result = 1;
result = PRIME * result + getId();
return result;
}
3、总结
1) 对象相等则hashCode一定相等;
2) hashCode相等对象未必相等。也就是说两个不同的对象也有可能hashCode(散列码(取余得出的))相同
判断两个对象是否相等的条件:
没有重写的话,只要hashCode不相等那么两个对象一定不相同,
重写的话,首先判断hashCode如果不一样,那么两个对象不相等,如果hashCode一样的话,再比较equals,如果true就相同,否则不相等。
相关文章推荐
- 《Java核心技术》第10版读书笔记之Chap5(3)——Object类及其equals、hashCode与toString方法
- Object 开发中常用的重写方法总结toString,equals,hashCode,compareTo
- Object的equals方法和toString方法
- Object 开发中常用的重写方法总结toString,equals,hashCode,compareTo
- JAVA初学之Object类之toString方法、equals方法
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解
- Java记录 -57- Object的equals、hashcode和toString方法
- Object的toString方法:Object的equals方法:System类的概念和构造:冒泡排序,自动装箱拆箱, Date类的常用方法:6 SimpleDateFormat的概述:
- Object常用方法介绍及注意事项equals(),hashCode(),getClass(),toString()
- 复写Object超类的equals,hashCode,toString方法
- 为什么SpringAOP使用JDK动态代理时好像没有代理Object.[equals()、hashCode()、toString()]这三个方法
- 面向对象第九课,面向对象三大基本特征,继承,Object用法,toString和equals方法
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
- Object的方法equals,hashCode,toString,clone。另外Comparable接口的方法
- Java记录 -57- Object的equals、hashcode和toString方法
- JAVA Object对象(toString、equals、hashCode方法)、String类、StringBuffer、StringBuider、System、Runtime、Date、Mat
- Object类的toString()和equals()方法
- Java Object类的equals()方法
- (二十五)Java工具类EqualsBuilder协助Object.equals(object)方法详解
- 关于Object中的equals方法重写需要注意什么