Java基础——Object类的三个常用方法

转载 2018年04月16日 08:43:49

内容整理自《Java 核心技术 卷一》

Object类的简介
java.lang.Object
java.lang包在使用的时候无需显示导入,编译的时候由编译器自动导入
Object类是所有类的超类,是java中唯一没有父类的类,如果没有明确地指出超类,Object就被认为是这个类的超类
在Java中,只有基本类型不是对象
Object类的方法
equals方法()
Object类中的equals方法用于监测一个对象是否等于另外一个对象。但是,如果单单是在Object类当中,这个方法仅仅只判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的
为什么每个类要重写equals的原因:然而,对于多数类来说,这种判断没有太大的意义。例如两个Employee对象,需要判断的是两个对象的name、time和salary是否相等,而不仅仅只是判断两个对象是否具有相同的引用
在类中equals的重写:
class Employee
{
String name;
double salary;
Date hireDay;

//此处用Object类接收所有的类型
public boolean equals(Object otherObject){
//1.判断是否是相同的引用
if(this == otherObject) return true;
//2.判断对象是否为空
if(otherObject == null) return false;
//3.判断是否是同一个类
if(getClass() != otherObject.getClass()) return false;

    //4.做类型转换
    Employee other = (Employee) otherObject;
    //5.检测各个域是否相等
    return name.equals(other.name)
    && salary == other.salary
    && hireDay.equals(other.hireDay);
}
...

}

为什么要用getClass()而不用instanceof
例如有一个引用对象Employee e,和一个对象Manager m,并且两个对象具有相同的姓名、薪水和雇佣日期。现在判断 e.equals(m),当代码执行到 m instanceof Employee 的时候,返回的是true。但是如果判断m.equals(e),e instanceof Manager的时候,返回了false。这违背了Java语言对equals方法的特性要求,自反性:a == b , b == a 。
hashCode()
每个对象都拥有自己的一个散列码,是一个整形值,如果重写了equals方法,就必须重写hashCode方法
hashCode的返回值必须是int,举例说明:
class Employee
{
public int hashCode()
{
return 7*name.hashCode()+11*new Double(salary).hashCode
+13*hireDay.hashCode();
}
}
为什么重写了equals就必须重写hashCode:感觉不错的解答,总结的就是,如果重写了equals而不重写hashCode可能导致两个对象通过equals方法判断为相等,但是却具有不同的散列值
toString()
toString()方法,它用于返回表示对象值的字符串。例如,Point类的toString方法将返回下面这样的字符串:java.awt.Point[x=10,y=20]
随处可见toString方法的主要原因是:只要对象与一个字符串通过操作符“+”连接起来,Java编译器就会自动地调用toString方法,以便获得这个对象的字符串描述
强烈建议为自定义的每一个类增加toString方法。这样做不仅自己受益,而且所有使用这个类的程序员也会从这个日志记录支持中受益匪浅

转载出处 https://blog.csdn.net/HughGilbert/article/details/71213682

EJB商业探讨的白皮书

1 业界支持  任何一个商业化的技术要想拥有良好的市场态势,业界内重要企业的大量参与是十分重要的。J2EE是由SUN引导,各厂商共同发起的,并得到广泛认可的工业标准。业内企业计算领域的大企业如:IBM...
  • DrunkenLion
  • DrunkenLion
  • 2001-06-20 08:49:00
  • 663

java Object类及其常用方法

一:类概述 Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。 在不明确给出超类的情况下,Java会自动把Ob...
  • guo0820
  • guo0820
  • 2016-03-31 21:34:42
  • 613

java Object类的常用方法

1.Object类中的toString()方法     《1. object 默认方法 toString方法,toString() 输出一个对象的地址字符串(哈希code码)!     《2.可以通过...
  • qq_36592225
  • qq_36592225
  • 2017-10-16 14:58:30
  • 377

java Object类常用方法浅解

java Object类常用方法浅解
  • xu511739113
  • xu511739113
  • 2016-08-26 15:14:20
  • 5699

Object类 Object常用成员方法

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • u011616739
  • u011616739
  • 2016-12-21 21:18:31
  • 1164

java基础之常用类的方法

Object 1.是类层次结构的根类,所有类都直接或间接的继承自object类。 2.要掌握的方法 A:toString()  返回对象的字符串表示  例 student [name ...
  • jian93121
  • jian93121
  • 2016-08-11 22:13:34
  • 1688

Java基础知识点pdf

  • 2012年11月21日 13:48
  • 1.38MB
  • 下载

Java常见面试题—Object 类中的方法

Object 类中的方法Object() 默认构造方法 clone() 创建并返回此对象的一个副本。 equals(Object obj) 指示某个其他对...
  • xiaomingdetianxia
  • xiaomingdetianxia
  • 2017-08-20 15:00:08
  • 386

java基础面试题:Object类到底实现了哪些方法

Object是所有类的父类,任何类都默认继承Object。Object类到底实现了哪些方法? 1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以...
  • chenpeng19910926
  • chenpeng19910926
  • 2016-06-29 16:12:32
  • 3130

Object类的常用方法

1 clone()  :创建并返回副本 使用clone方法必须实现Cloneable接口,并重写clone方法 public class CloneTest implements Cloneabl...
  • tobeafreefish
  • tobeafreefish
  • 2015-10-18 09:49:16
  • 1808
收藏助手
不良信息举报
您举报文章:Java基础——Object类的三个常用方法
举报原因:
原因补充:

(最多只允许输入30个字)