Java中Object类的方法(toString方法和equals方法)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39132830/article/details/78571263
Object是所有类的父类(国外成为超类superclass),Object类的方法是相当少的(理解为教室人越多,他们的共同点越少)。

一:toString方法

Object的toString()方法帮助我们返回一个字符串,这个字符串的格式是固定的:类名@hashcode。这个hashcode是一串数字(16进制),在Java中叫句柄/(虚拟)地址。但是*句柄不是内存地址*。

toString方法定义的原意是返回能够描述当前这个类的事例的一串文字。但是在Object中无意义,所以通常需要重写。

system.out.println(obj) 方法实际上是输出给定对象的toString方法的返回值。

对象引用存栈里,对象本身存堆(JVM在管理对象时创建的一个内存空间)里。

静态方法中,不能使用非静态属性和方法;而非静态方法中可以使用静态属性和方法。所以不能在main方法中system.out.println(toString)。

二:equals方法

public boolean equals(Object obj)
该方法的原意:
比较对象与给定内容对象是否一致
在Object中的实现(和==一模一样):
public boolean equals(Object obj)
return (this==obj)

==比较的是双方的值是否相等,p1,p2是两个引用类型变量,而引用类型变量保存的是对象的句柄(对象的地址那个hashcode值),==在对象比较时描述的是p1,p2是否为同一个对象。而equals方法力图去描述两个对象内容是否相等,内容相等取决于业务逻辑需要,可以自行定义比较规则。

equals也是需要重写的!重写equals时第一件事就是判断给定的对象是否和当前对象为同一类型。不是同一类型直接返回false,不具有可比性。equals比较前需要进行安全验证,确保给定的对象不是null,obj若是null,说明该引用变量没有指向任何对象,那么就不能引用obj所指向对象(因为对象不存在)的属性或方法,若这么做会引发NullPointerException,空指针异常!

直接将Object类转为子类是存在风险的!我们不能保证Object和我们要比较的对象是同一类型的,会引发ClassCastException(类造型异常)!


展开阅读全文

没有更多推荐了,返回首页