- 浏览: 277808 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (161)
- 【**计划】 (2)
- 【**Core Java**】 (30)
- 【**JAVA EE】 (6)
- JDBC (3)
- Hibernate专题系列 (0)
- 【**OS】 (14)
- 【**架构设计/设计模式】 (11)
- 【Hadoop】 (3)
- 【**分布式】 (9)
- 模板 (1)
- C (2)
- 常用工具 (1)
- Oracle (2)
- 【Tips】 (3)
- 【数据库】 (2)
- 玩转Ubuntu (0)
- 【计算机网络/网络编程】 (7)
- 【**Search Engine】 (21)
- 【**专题**】 (6)
- 【**Python】 (10)
- XML (1)
- 【**Open Source Framework】 (1)
- 【高级主题】 (1)
- 【存储】 (3)
- 【笔试面试】 (2)
- 【**数据结构与算法设计】 (20)
- 【其他】 (3)
- 【编程练习】 (2)
- 【待完成】 (12)
- 【工作】 (6)
- 【软件研发】 (4)
- 【**多线程多进程编程】 (5)
- 【Web Service】 (1)
- 【表达式解析/JavaCC系列】 (5)
- 【缓存系统:Memcached】 (1)
- 【Java IO/NIO】 (5)
- 【JVM运行机制及内存管理】 (7)
最新评论
-
107x:
...
python list排序 -
yuzhu223:
...
【Python基础】Python的lambda函数与排序 -
Tonyguxu:
分析查询结果的打分小于11.query=1065800715* ...
lucene打分机制的研究 -
Tonyguxu:
query=139320661963.013709 = (MA ...
lucene打分机制的研究 -
Tonyguxu:
query=10658007150.6772446 = (MA ...
lucene打分机制的研究
- 前言
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())
- 扩展
一. “冷藏”与“解冻”
发表评论
-
【Java IO】Java的序列化机制
2012-06-12 18:07 1028Java序列化机制采用的序列化算法: 1.所有保存到磁盘 ... -
关于 Java 对象序列化【转载】
2012-06-04 16:45 1395简介: Java 对象序列化(Java Object Seri ... -
JavaCC/JJTree入门
2012-05-03 18:17 1416JavaCC 介绍 JJTree JJTree为了让 ... -
【Java NIO】内存映射文件
2012-04-24 14:16 1348java.nio包包含对下列特性的支持: 1.字符集 ... -
【Core Java】正则表达式
2012-04-05 23:40 01 -
【Core Java】类加载
2012-04-02 21:16 855主要内容包括: 1.类加载 / 类连接 / 类初始化 2. ... -
【****Core Java提纲****】
2012-04-02 18:54 806Java IO NIO Java并发编程 ... -
Java编程中“为了性能”尽量要做到的一些地方[zz]
2012-03-19 23:31 8451. 尽量在合适的场合使用单例 使用单例可以减轻 ... -
【Java并发】线程安全
2012-03-10 15:44 1054什么是线程安全? 当多个线程访问一个类时,如果不用考 ... -
【Java Socket】
2012-03-07 18:49 2712 -
各个rules里代码分析
2012-03-06 10:54 759InternalChannelRule private ... -
WXXR LRUList的实现
2012-03-01 16:01 777LRUList -
Apache LRUMap实现
2012-02-23 13:10 1099源码是 org.apache.commons.collect ... -
WXXR LRUMap的实现
2012-02-22 18:33 1887前言 实现LRU算法,注意观察者模式、并发(读写锁、线程池) ... -
【专题】LRU
2012-02-22 16:21 1529包含如下内容: 一. LRU算法 ht ... -
LRU理论
2012-02-21 18:46 10331.LRU算法介绍 LRU是Least Rec ... -
Eclipse Memory Analyzer使用指南
2012-02-21 18:42 1096参考 http://www.eclipse.org/ma ... -
【Java并发】锁
2012-02-20 14:04 3055简介 ... -
【Java IO】IO介绍
2012-02-14 09:40 738传统IO模型——流模型 Java IO分类 文 ... -
【Java NIO】NIO介绍
2012-02-13 18:13 874概述 新IO使用内存映射文件的方式来处理输入/输出,新IO将 ...
相关推荐
# Java核心知识点详解:Object类与常用API ## Object类概览 ### 1.1 概述 在Java编程语言中,`java.lang.Object`类具有非常特殊的地位,它是所有Java类的基类,即使程序员没有明确地指定某个类继承自`Object`类,...
本文将深入探讨`Object`类,以及其核心方法`equals()`与Java中的`==`操作符之间的差异。 `Object`类位于Java的核心库`java.lang`包中,它提供了基本的方法来支持对象的创建、比较和字符串表示。以下是`Object`类的...
#### 一、Object类常用方法 在Java中,`Object`类是最基础的类,所有其他类都直接或间接继承自它。因此了解并掌握`Object`类的方法对于深入理解Java编程至关重要。 1. **toString() 方法**: - **用途**:提供了...
这意味着 `Object` 类提供了所有 Java 对象共享的一些核心行为和特征。 #### 二、Object 类的重要性 `Object` 类的重要性体现在以下几个方面: 1. **作为所有类的基础**:Java 中的所有类(除了基本数据类型之外...
在深入探讨“接口与Object类”这一主题之前,我们首先明确两个核心概念——接口(interface)与抽象类(abstract class),以及它们与Java基础类库中不可或缺的Object类之间的关系。 ### 接口与抽象类 #### 接口...
Object类是所有Java类的根父类,无论何时我们创建一个新的类,除非明确指定其他父类,否则它都会默认继承Object类。这使得Object类中的方法对所有Java类都可用,体现了Java的继承性和多态性。 1. **根父类理解** -...
`Java程序设计:020611_Object类.ppt`这个资料主要讲解了Object类的核心方法,包括`toString()`和`equals()`,以及如何通过Object类接收不同类型的引用数据。 1. **Object类的作用**: - Object类提供了对所有Java...
《Object-C核心动画编程指南》是Apple公司官方提供的一个专业文档,旨在向开发者介绍如何利用Objective-C语言在MacOSX和iOS平台上进行高效的动画编程。文档内容详细,涵盖了核心动画的关键概念、类结构、图层属性、...
Object类提供了几个核心的方法,这些方法在处理对象时非常关键,包括equals()、hashCode()、toString()、clone()、finalize()等。 1. **equals() 方法**: - 默认情况下,equals() 方法比较的是对象的引用,即检查...
本章将深入探讨Object类的一些核心方法,如toString()和equals(),以及日期类和StringBuilder类的使用,同时涵盖包装类的概念和自动装箱、拆箱。 1. Object类 - **概述**:Object类位于java.lang包下,它是所有...
【核心代码】 归档 ├── AirPrinter │ ├── AirPrinter │ │ ├── AirPrinter-Info.plist │ │ ├── AirPrinter-Prefix.pch │ │ ├── AirPrinterAppDelegate.h │ │ ├── AirPrinterAppDelegate.m...
ObjectBox的核心特性包括: 1. **高性能**:ObjectBox使用了自己的数据存储引擎,针对移动设备进行了优化,提供比SQLite更快的读写速度,尤其是在处理大数据量时。 2. **简单API**:ObjectBox通过简单的Java或...
通常,这个包会包含几个关键文件,如`.pas`单元文件,它们包含了SuperObject的核心实现。将这些文件添加到你的工程中,确保编译器能够找到它们。 使用SuperObject解析JSON数据的基本步骤如下: 1. 导入必要的单元...
计算机后端-Java-Java核心基础-第12章 面向对象04 23. Object类的理解.avi
计算机后端-Java-Java核心基础-第14章 面向对象06 19. Object类综合练习.avi
计算机后端-Java-Java核心基础-第14章 面向对象06 11. Object类结构的剖析.avi
《Object-Oriented Programming with Object C》是一本深入探讨面向对象编程(OOP)与Objective-C语言的专业书籍。Objective-C是Apple开发的一种强大的、面向对象的编程语言,主要用于iOS和macOS的应用程序开发。这...
它可能包含了一个新的类或方法,允许用户在序列化JSON对象时指定属性的顺序,或者在解析JSON时保持属性的预定义顺序。这通常通过在内部实现一个自定义的遍历或序列化算法来实现,可能涉及到哈希表或数组的数据结构,...
这个开发包对于初学者来说是一个宝贵的资源,因为它包含了实际项目中的源代码和示例,有助于学习和理解Object-C的核心概念。 ### 1. 类与对象 在Object-C中,一切皆为对象。类是对象的蓝图,定义了对象的属性...
计算机后端-Java-Java核心基础-第15章 面向对象07 03. 复习:Object类及内部方法.avi