JAVA SE 学习第三天

来源:互联网 发布:知乎 大提琴 专辑 编辑:程序博客网 时间:2024/06/06 00:59

equals

public boolean equals(Object obj)

指示某个其他对象是否与此对象“相等”。

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 xy当且仅当 xy 引用同一个对象时,此方法才返回truex == 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、类不能被继承

接口你抽象方法和常量值的定义的集合。只有常量和方法的定义而没有实现。



0 0
原创粉丝点击