`
Tonyguxu
  • 浏览: 279795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

核心Object类

阅读更多
  • 前言

Object类是java中所有类的基类,而我们常常忽略这个类。该专题就是来研究Ojbect类中方法。方法如下:

protected  Object clone()

boolean equals(Object obj)

String toString()

int hashCode()

protected  void finalize() —— 见《JVM专题》

Class<?> getClass()                  —— 见《类加载及反射专题》

void notify()

void notifyAll()

void wait()                       —— 见《多线程专题》

void wait(long timeout)

void wait(long timeout, int nanos)

  • 方法解析

clone( )

克隆分为浅克隆和深克隆。浅克隆只复制一层,克隆的对象的引用不一样但是其中的属性引用一样的,而深克隆层层复制,为对象的属性重新申请内存空间。

Object中是浅克隆,Object 中没有定义克隆规范,规范在Cloneable接口中,所以只有实现Cloneable接口的类才能调用clone(),否则会抛出不支持克隆的异常java.lang.CloneNotSupportedException。

----示例代码见CoreJavaSamples项目

 

toString( )

public String toString()

1. 返回对象的字符串表示。该字符串是“自我描述”是一个简明且易于读懂的表示该对象状态的信息。

2. 建议子类重写该方法。

可按该格式重写:类名[属性1=值1,属性2=值2,..]

3. 默认返回 “类名@该对象哈希码的无符号十六进制”

getClass().getName() + '@' + Integer.toHexString(hashCode())

4. 对于Person p = new Person(),System.out.println(p)等效于

System.out.println(p.toString())。

下面操作也是ok的

String str = p + “”;同样等效于 String str = p.toString() + “”

 

getClass( )

返回此对象运行时类的Class对象。

----详见《类加载和反射》-----

 

hashCode( )

public int hashCode()

1. 返回对象的哈希码值。默认,按对象的地址计算

(与System.identityHashCode(Object x)计算结果相同)

在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。 

如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。 

如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不要求一定生成不同的整数结果。但是,程序员应该意识到,(推荐)为不相等的对象生成不同整数结果可以提高哈希表的性能。

2. 很多类重写Object类中的hashCode(),不根据地址来计算其值。

 

equals( )

1. Object类中判断相等的标准是两个对象是否是同一个对象,即引用是否一样。

2. 子类通常需要重写该方法。

在java中,equals方法和hashCode()有连带关系,java对hashCode有规定:

equals为true的两个对象,hashCode必须相同,反之未必。

equals为false的两个对象,hashCode无所谓。

因此,重写equals必须重写hashCode,保持一致

 

【重写方式1】
@Override
public boolean equals(Object obj){
if(obj==null) return false;
else if(obj  instanceof  Student){
Student  stu = (Student)obj;
return this.id==stu.id;
}
return false;
}
@Override
public int hashCode(){
int type = 41;
return type*71+this.id;
}
【重写方式2】

@Override
public boolean equals(Object obj){
	if(obj==null) return false;
	else if(obj.getClass()  ==  this.getClass()){
	//注意obj.getClass获得是类型对象只有一个,可以直接使用==比较
		Student stu = (Student)obj;
		return stu.id == this.id;
	}
	return false;
}
@Override
public int hashCode(){
	int type = this.getClass().hashCode();
	return type*71+this.id;
}

 比较:(obj  instanceof  Student)  VS  (obj.getClass()  ==  this.getClass())

 

 

  • 扩展
    一. “冷藏”与“解冻”

 

 

分享到:
评论

相关推荐

    day01【Object类、常用API】-笔记.md

    # Java核心知识点详解:Object类与常用API ## Object类概览 ### 1.1 概述 在Java编程语言中,`java.lang.Object`类具有非常特殊的地位,它是所有Java类的基类,即使程序员没有明确地指定某个类继承自`Object`类,...

    Java Object类认识

    本文将深入探讨`Object`类,以及其核心方法`equals()`与Java中的`==`操作符之间的差异。 `Object`类位于Java的核心库`java.lang`包中,它提供了基本的方法来支持对象的创建、比较和字符串表示。以下是`Object`类的...

    Java -核心类库 Object类常方法 Math类常用方法 System类常用方法 基本类型包装类常用方法等

    #### 一、Object类常用方法 在Java中,`Object`类是最基础的类,所有其他类都直接或间接继承自它。因此了解并掌握`Object`类的方法对于深入理解Java编程至关重要。 1. **toString() 方法**: - **用途**:提供了...

    java-object类

    这意味着 `Object` 类提供了所有 Java 对象共享的一些核心行为和特征。 #### 二、Object 类的重要性 `Object` 类的重要性体现在以下几个方面: 1. **作为所有类的基础**:Java 中的所有类(除了基本数据类型之外...

    接口与Object类

    在深入探讨“接口与Object类”这一主题之前,我们首先明确两个核心概念——接口(interface)与抽象类(abstract class),以及它们与Java基础类库中不可或缺的Object类之间的关系。 ### 接口与抽象类 #### 接口...

    Java面向对象(进阶)- Object类的详细概述

    Object类是所有Java类的根父类,无论何时我们创建一个新的类,除非明确指定其他父类,否则它都会默认继承Object类。这使得Object类中的方法对所有Java类都可用,体现了Java的继承性和多态性。 1. **根父类理解** -...

    Java程序设计:020611_Object类.ppt

    `Java程序设计:020611_Object类.ppt`这个资料主要讲解了Object类的核心方法,包括`toString()`和`equals()`,以及如何通过Object类接收不同类型的引用数据。 1. **Object类的作用**: - Object类提供了对所有Java...

    object-c 核心动画编程指南

    《Object-C核心动画编程指南》是Apple公司官方提供的一个专业文档,旨在向开发者介绍如何利用Objective-C语言在MacOSX和iOS平台上进行高效的动画编程。文档内容详细,涵盖了核心动画的关键概念、类结构、图层属性、...

    Object arx 类天正墙体 的 自定义实体

    类天正墙体作为自定义实体,其核心是模拟AutoCAD中的墙体对象,并添加特定的属性和行为。这包括墙体的厚度、材质、高度、门窗洞口等信息,以及与之相关的计算和绘图功能。 二、文件结构解析 1. TC_Wall.h 和 TC_...

    Java Object 类高难度进阶版面试题集锦解析Java Object类高难度面试题及答案解析

    Object类提供了几个核心的方法,这些方法在处理对象时非常关键,包括equals()、hashCode()、toString()、clone()、finalize()等。 1. **equals() 方法**: - 默认情况下,equals() 方法比较的是对象的引用,即检查...

    Java基础知识-day01【Object类、常用API】.pdf

    本章将深入探讨Object类的一些核心方法,如toString()和equals(),以及日期类和StringBuilder类的使用,同时涵盖包装类的概念和自动装箱、拆箱。 1. Object类 - **概述**:Object类位于java.lang包下,它是所有...

    Object-Cios苹果app开发入门object-c例子demo14个实例 一般编程问题

    【核心代码】 归档 ├── AirPrinter │ ├── AirPrinter │ │ ├── AirPrinter-Info.plist │ │ ├── AirPrinter-Prefix.pch │ │ ├── AirPrinterAppDelegate.h │ │ ├── AirPrinterAppDelegate.m...

    Android 三方数据库ObjectBox使用

    ObjectBox的核心特性包括: 1. **高性能**:ObjectBox使用了自己的数据存储引擎,针对移动设备进行了优化,提供比SQLite更快的读写速度,尤其是在处理大数据量时。 2. **简单API**:ObjectBox通过简单的Java或...

    计算机后端-Java-Java核心基础-第12章 面向对象04 23. Object类的理解.avi

    计算机后端-Java-Java核心基础-第12章 面向对象04 23. Object类的理解.avi

    计算机后端-Java-Java核心基础-第14章 面向对象06 19. Object类综合练习.avi

    计算机后端-Java-Java核心基础-第14章 面向对象06 19. Object类综合练习.avi

    DelphiXe10 Json解析类 superobject 支持xe10

    通常,这个包会包含几个关键文件,如`.pas`单元文件,它们包含了SuperObject的核心实现。将这些文件添加到你的工程中,确保编译器能够找到它们。 使用SuperObject解析JSON数据的基本步骤如下: 1. 导入必要的单元...

    计算机后端-Java-Java核心基础-第14章 面向对象06 11. Object类结构的剖析.avi

    计算机后端-Java-Java核心基础-第14章 面向对象06 11. Object类结构的剖析.avi

    《Object-Oriented Programming with Object C》 英文高清原版 PDF

    《Object-Oriented Programming with Object C》是一本深入探讨面向对象编程(OOP)与Objective-C语言的专业书籍。Objective-C是Apple开发的一种强大的、面向对象的编程语言,主要用于iOS和macOS的应用程序开发。这...

    SuperObject增加排序.rar

    它可能包含了一个新的类或方法,允许用户在序列化JSON对象时指定属性的顺序,或者在解析JSON时保持属性的预定义顺序。这通常通过在内部实现一个自定义的遍历或序列化算法来实现,可能涉及到哈希表或数组的数据结构,...

    Object—C 开发包

    这个开发包对于初学者来说是一个宝贵的资源,因为它包含了实际项目中的源代码和示例,有助于学习和理解Object-C的核心概念。 ### 1. 类与对象 在Object-C中,一切皆为对象。类是对象的蓝图,定义了对象的属性...

Global site tag (gtag.js) - Google Analytics