Java中所有类的超类Object
2016-09-05 21:42
288 查看
Object的地位
在Java中所有的类都继承于Object类,但不用在声明一个类时显示的extends Object
Object中几个重要的方法:
1.equals方法:
用于检测一个对象是否等于另外一个对象,即判断两个对象是否具有相同的引用.然而对于大多数类来说这种检测没有太大意义。
在实际中用户更倾向与更具自己的标准来判断两个对象是否相等。例如:如果来年各个雇员的姓名 薪水和雇佣日期都一样,就认为他们是相等的。下买呢示例演示equals方法的实现
如果存在继承关系,则先调用父类中的equals()方法,如果父类中的检测失败(对象不相等),就说明对象不可能相等。如果检测成功则在调用子类中的检测方法。例如:
2.hashCode方法:
hash code又称为散列码,是由对象到处的一个整型值。不同的对象的散列码基本不会相同。
由于hashCode方法定义于Object类中,因此在用户没有重写此方法之前,每个对象都有一个默认的散列码,其值为对象的存储地址。
有一点需要注意:字符串的散列码是由内容导出的,String类重写了hashCode方法,如下:
注意:
Equals与hashCode的定义必须一致:如果x.equals(y)返回true,那么x.hashCode()就必须与y.hashCode()具有相同的值。所以通常在上面的Employee类中加上:
在Java中所有的类都继承于Object类,但不用在声明一个类时显示的extends Object
Object中几个重要的方法:
1.equals方法:
用于检测一个对象是否等于另外一个对象,即判断两个对象是否具有相同的引用.然而对于大多数类来说这种检测没有太大意义。
在实际中用户更倾向与更具自己的标准来判断两个对象是否相等。例如:如果来年各个雇员的姓名 薪水和雇佣日期都一样,就认为他们是相等的。下买呢示例演示equals方法的实现
class Employee{ int salary; String name; String hireday; //返回一个布尔值,true表示相等,否则不相等 @Override public boolean equals(Object otherobject){ //如果是同一个引用则说明相等 if(this==otherobject) return true; //参数不能为空 if(otherobject==null) return false; //两个对象必须同属一个类(用到了反射) if(this.getClass!=otherobject.getClass) return false; //通过上买你的判断我们知道otherobject为一个非空的Employee对象 Employee other=(Employee)otherobject; //接下来实现用户自己的比较标准:雇员的姓名 薪水和雇佣日期都一样 return Object.equals(name,other.name) &&salary==other.salary &&Object.equals(hireday,other.hireday) } }
如果存在继承关系,则先调用父类中的equals()方法,如果父类中的检测失败(对象不相等),就说明对象不可能相等。如果检测成功则在调用子类中的检测方法。例如:
class Manager extends Employee{ int bounds; //返回一个布尔值,true表示相等,否则不相等 @Override public boolean equals(Object otherobject){ if(!super.equals(otherobject)) return false; Maanger other=(Maanger)otherobject; return this.bounds==other.bounds; } }
2.hashCode方法:
hash code又称为散列码,是由对象到处的一个整型值。不同的对象的散列码基本不会相同。
由于hashCode方法定义于Object类中,因此在用户没有重写此方法之前,每个对象都有一个默认的散列码,其值为对象的存储地址。
有一点需要注意:字符串的散列码是由内容导出的,String类重写了hashCode方法,如下:
class String{ @Override public int hashCode(){ int hash=0; for(int i=0;i<length();i++){ hash=31*hash+charAt(i); } return hash; } }
注意:
Equals与hashCode的定义必须一致:如果x.equals(y)返回true,那么x.hashCode()就必须与y.hashCode()具有相同的值。所以通常在上面的Employee类中加上:
@Override public int hashCode(){ return Object.hash(name,salary,hireday); }
相关文章推荐
- 黄阶低级 - 《 Java 核心》- 5.2 Object 类,所有的类的超类 - 修改0次
- <CoreJava> 5.2 Object:所有类的超类
- 我的java学习笔记(9)关于Object:所有类的超类
- JAVA核心技术 第五章 Object 所有类的超类
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解
- java:所有东西都是对象,所以根类就是Object
- JAVA中所有的类都继承了 java.lang.Object 类,而C++中没有这样的类,JAVA这样做有什么好处?
- Object(所有类的超类)一些有用的方法讲解与实例演示
- java基础之 超类Object
- Java 将equals override为比较所有object的方法
- java超类Object的equals()方法
- java基础系列(五)--所有类的父类Object
- Java反射获取实体的所有可见属性值,返回Object数组
- Object所有类的超类之几个方法详析
- Java反射获取实体的所有可见属性值,返回Object数组
- 【java基础】Object所有方法
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
- The java.lang.Object Class
- 原来TCWeb中所有的技术都在《JavaServer Pages Specification》中
- Thinking in Java 读书笔记 —— 1.Introducation to Object