1、在 Object 类中 equals 方法的实现过程如下:
public boolean equals ( Object o ) {
return this == o ; // 本质上仍然是在比较地址
}
2、我们需要重写从 Object 类继承的 equals 方法才能实现按要求来比较两个对象是否 “相等”
比如,我们期望比较 两匹马 的 名字、年龄、身高、体重
3、声明变量时所使用的类型决定了通过该变量可以访问那些 成员变量 和 成员方法
4、使用 instanceof 关键字可以判断 某个对象 是否是 某种类型、
引用变量 instanceof 类型
another instanceof Horse
当 引用变量 所指向的 对象 是 指定类型 时,instanceof 表达式返回 true ,否则返回 false 。
要注意区分 引用变量 和 引用变量 所指向(或者叫所引用的) 对象 。
5、引用类型的强制类型转换
目标类型 变量名称 = ( 目标类型 ) 引用变量 ;
Horse h = ( Horse ) another ;
6、比较两个基本类型的值是否相等可以使用 == 运算符;比较两个对象是否相等要使用 equals 方法
7、如果要比较两个 字符串 是否相等 ,应该使用 由 String 类重写的 equals 方法来实现
public class Horse extends Object {
private String name ;
private int age ; // 以 年 为单位 , 存储整数
private int height ; // 以 厘米 为单位,存储整数
private int weight ; // 以 克 为单位,存储整数
// 当显式书写了一个构造之后,编译器不再为该类添加 默认构造
public Horse( String name , int age , int height , int weight ) {
this.name = name ;
this.age = age ;
this.height = height ;
this.weight = weight ;
}
@Override
public String toString(){
return “name : “ + this.name + “ , age : “ + this.age + “ , height : “ + this.height + “ , weight : “ + this.weight ;
}
@Override
public boolean equals( Object another ) {//object是引用变量类型,another是引用变量, 引用变量 所指向(或者叫所引用的) 对象是传过来的b
// 声明一个变量时所使用的类型,决定了通过该变量可以访问那些 成员变量 和 成员方法
// 声明变量时所使用的类型中有那些 成员变量 和 成员方法 则通过该类型的引用变量就可以访问那些 成员变量 和 成员方法
// if( this.height == another.height ) //【编译失败】错误: 找不到符号 ( 因为在 another 对应的类型 Object 中并没有声明 height 变量 )
if( another instanceof Horse ) { // 判断 another 变量所引用的 对象 (这里是下面传来的实例b是Horse类型)是否是 Horse 类型
Horse h = (Horse) another ; // 引用类型的强制类型转换把object another转换成Horse another
// 比较基本类型的值是否相等可以使用 == 运算符,但比较 两个对象是否相等需要借助于 equals 方法( String 也不例外 )
if( this.name.equals( h.name ) && this.age == h.age && this.height == h.height && this.weight == h.weight ) {
return true ;
}
}
return false ;
}
public static void main(String[] args) {
Horse a = new Horse( “的卢” , 20 , 198 , 289000 );
Horse b = new Horse( “的卢” , 20 , 198 , 289000 );
System.out.println( a == b ); // false : 因为两个变量中存储的值是不同的
System.out.println( “~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~” );
// public boolean equals( Object another ) : Indicates whether some other object is “equal to” this one.
// a ==> this one , b ===> some other object
System.out.println( a.equals( b ) ) ; // 借助于从 Object 类继承的、可见的 equals 方法来实现比较两个对象是否 “相等”
System.out.println( “= = = = = = = = = = = = = = = =” );
Object o = new Object();
System.out.println( a.equals( o ) ) ;
}
}