zoukankan      html  css  js  c++  java
  • java常用类 --- Object

    Object类

      Object类是所有Java类的父类,其位于java.lang包中。任何Java对象,如果没有显示定义父类则它默认Object类作为父类。

      方法如下:

    其中与线程相关的有5个方法: notify()、notifyAll()、wait()、wait(long timeout)、wait(long timeout,int nanos),  这些方法等介绍线程时在做解释。

    下面来看看其他方法:

    (1)equals(Object obj)方法
    功能:
      Object类定义的equals方法用于判断某个指定的对象(调用equals方法的对象)与当前对象是否等价。
    equals方法在非空对象引用上实现相等关系:
      自反性:对于任何非空引用值x, x.equals(x)都应返回true
      对称性:对于任何非空引用值x和y, 当且仅当y.equals(x)返回true时,x.equals(y)才返回true
      传递性:对于任何非空引用值x、y、z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应返回true
      一致性:对于任何非空引用值x和y,多次调用x.equals(y)始终返回true或始终返回false.
      对于任何非空引用值x, x.equlas(null)都返回false
    源代码:

    1 public boolean equals(Object obj) {
    2 return (this == obj);
    3 }

    equals方法与"=="运算符的关系:
      (a)equals()方法只能比较引用类型; "=="可以比较引用类型及基本类型。
      (b)默认的equals()方法比较的是内存地址,基本等同于"==",但是对类File、String、Date及包装类来说 是比较的值而不是内存地址。
      (c)"=="进行比较的时候,引用类型数据比较的是引用,及内存地址;基本数据类型比较的是值。
    覆盖equals方法:
      覆盖equals方法的一般步骤如下:
      (a)用==检查是否参数就是这个对象的引用
      (b)判断要比较的对象是否为null,如果是null,则返回false
      (c)用if(getClass() != obj.getClass())判断参数的类型是否正确
      (d)把参数转换成合适的类型
      (f)比较对象属性值是不是匹配
      下面是Student类重写equals方法来比较对象是否相等,一般euqals方法可以通过eclipse工具自动生成。

     1 public class Student {
     2     private String id;
     3     private String name;
     4     private String age;
     5     private String home;
     6     @Override
     7     public boolean equals(Object obj) {
     8         if (this == obj)
     9             return true;
    10         if (obj == null)
    11             return false;
    12         if (getClass() != obj.getClass())
    13             return false;
    14         Student other = (Student) obj;
    15         if (age == null) {
    16             if (other.age != null)
    17                 return false;
    18         } else if (!age.equals(other.age))
    19             return false;
    20         if (home == null) {
    21             if (other.home != null)
    22                 return false;
    23         } else if (!home.equals(other.home))
    24             return false;
    25         if (id == null) {
    26             if (other.id != null)
    27                 return false;
    28         } else if (!id.equals(other.id))
    29             return false;
    30         if (name == null) {
    31             if (other.name != null)
    32                 return false;
    33         } else if (!name.equals(other.name))
    34             return false;
    35         return true;
    36     }
    37 }

    一般来说,覆盖equals方法应该连带覆盖hashCode方法

    (2)hashCode()方法
    hashCode是按照一定的算法得到一个数值,是对象的散列码值。主要用在集合中实现快速查找等操作。
    在java中对hashCode的规定如下:
      (a)在Java应用程序执行期间,在对同一个对象多次调用hashCode方法时,必须一致地返回相同的整数,前提是将对象进行equals比较时所用的信息没有被修改。
      (b)如果根据equals(object)方法,两个对象是相等的,那么对这两个对象中的每个对象调用hashCode方法都必须生成相同的整数结果。
      (c)如果根据equals(object)方法,两个对象不相等,那么对这两个对象中的仁一对象上调用hashCode方法不要求一定生成不同的整数结果。
      简单地说:如果两个对象equals为true,那么它们的hashCode值一定要相同;如果两个对象的hashCode相同,它们equals不一定为true.

    下面是Student类重写hashCode方法,可以通过eclipse工具自动生成。

     1     @Override
     2     public int hashCode() {
     3         final int prime = 31;
     4         int result = 1;
     5         result = prime * result + ((age == null) ? 0 : age.hashCode());
     6         result = prime * result + ((home == null) ? 0 : home.hashCode());
     7         result = prime * result + ((id == null) ? 0 : id.hashCode());
     8         result = prime * result + ((name == null) ? 0 : name.hashCode());
     9         return result;
    10     }

    (3)toString()方法
      toString()方法是Object类中定义的另一个重要方法,其源码为:

    1 public String toString() {
    2   return getClass().getName() + "@" + Integer.toHexString(hashCode());
    3 }

    方法的返回值是String类型,用于描述当前对象的有关信息。Object类中实现的toString()方法是返回当前对象的类型和内存地址信息,但在一些子类(如String,Date)中进行了重写,也可以根据需要在用户自定义类型中重写toString()方法,以返回需要的信息。

    下面是Student类重写toString方法,可以通过eclipse工具自动生成。

    1     @Override
    2     public String toString() {
    3         return "Student [id=" + id + ", name=" + name + ", age=" + age
    4                 + ", home=" + home + "]";
    5     }

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    python super()函数
    java中的方法
    python的5大数据类型操作之列表篇
    java流程控制
    eval函数 exec函数 compile函数之间的应用
    基础语法
    java中对字符串的操作
    iOS 简单的文件写入
    iOS弹出窗口
    iOS block传值和属性传值
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/5978199.html
Copyright © 2011-2022 走看看