Object 类的 toString方法和 equals方法
Object 类是所有 Java类的根基类,如果在类的声明中未使用 extends关键字指明其基类,则默认基类为 Object类。
例如:
toString方法
Object类的 toString方法返回一个字符串,该字符串由类名+标记@+此对象哈希码的无符号十六进制表示组成,比如:
Object 类 toString 源代码如下:
public String toString(){ return getClass().getName()+"@"+Integer.toHexString(hashCode); }
直接输出对象,跟输出对象调用 toString() 方法是一样的!
结果:
为了更方便的使用该方法,我们都是将 toString方法进行覆盖,然后打印我们想要的结果。举例:
------------------------------------------------------------------------------------
equals 方法
先说一下 “==” 的使用
等号“==”做比较使用,返回boolean类型值。
等号“==”在基本数据类型的使用中,比较的是值。
等号“==”在引用数据类型的使用中,比较的是内存地址。
虽然两对象中的属性值相同,但内存地址不同。除非让两个引用类型变量,指向同一块地址。
注意:字符串属于一种特殊的引用数据类型。由于在实际项目开发中会大量地使用字符串,所以比较占用内存。字符串是经过内存优化的一种存储方式,如果以前在内存中有字符串abc了,下面如果再创建一个引用,则默认指向的就是已再内存中存在的abc。
执行结果为:true
但是如果我们是以new的形式来创建字符串,则结果就不同了:
执行结果为:false
--------------------------------------------------------------------------------------
Object类的equals方法
源码:是比较内存地址的
public booelan equals(Object obj) {
return this==obj;
}
下面重写了Object类的equals方法,不是比较内存地址了,而是比较属性值是否都相同。
----------------------------------------------------------------------------------------------
String类的equals方法
源码:用来比较字符串的值是否相同时,与地址的概念没有任何关系。
案例: