equals
public boolean equals(Object obj)
指示某个其他对象是否与此对象“相等”。
Object
类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x
和 y
,当且仅当 x
和 y
引用同一个对象时,此方法才返回 true
(x == y
具有值 true
)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
-
参数:
-
obj
- 要与之比较的引用对象。
返回:
-
如果此对象与 obj 参数相同,则返回
true
;否则返回false
。
hashCode
public int hashCode()
-
返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,
java.util.Hashtable
提供的哈希表。hashCode
的常规协定是:- 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
- 如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用
hashCode
方法都必须生成相同的整数结果。 - 以下情况不 是必需的:如果根据
equals(java.lang.Object)
方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
-
-
返回:
此对象的一个哈希码值。
JAVA 对象的相等判断确实有点小意思....
public class TestEquals {
public static void main(String[] args) {
Cat c1 = new Cat(1,2,3);
Cat c2 = new Cat(1,2,4);
System.out.println(c1.equals(c2));
}
}
class Cat {
int color;
int height, weight;
public Cat(int color, int height, int weight) {
this.color = color;
this.height = height;
this.weight = weight;
}
public boolean equals(Object obj) {
if(obj == null) {
return false;
} else {
if(obj instanceof Cat) {
Cat c = (Cat)obj;
if(c.color == this.color && c.height == this.height && c.weight == this.weight) {
return true;
}
}
}
return false;
}
}
对象转型:可以使用引用变量 instanceof类名 来判断该引用型变量所指向的对象是否属于该类或者该类的子类。
多态:动态绑定,是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。(非编译期间)
final 1、变量的值不能被改变;2、方法不能被重写;3、类不能被继承
接口你抽象方法和常量值的定义的集合。只有常量和方法的定义而没有实现。