`
tianhandigeng
  • 浏览: 374332 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

深入Java对象的比较

    博客分类:
  • java
阅读更多
深入Java对象的比较
 
一、简单类型比较
 
Java中,比较简单类型变量用“==”,只要两个简单类型值相等即返回ture,否则返回false;
 
二、引用类型比较
 
引用类型比较比较变态,可以用“==”,也可以用“equals()”来比较,equals()方法来自于Object类,每个自定义的类都可以重写这个方法。Object类中的equals()方法仅仅通过“==”来比较两个对象是否相等。
 
在用“==”比较引用类型时,仅当两个应用变量的对象指向同一个对象时,才返回ture。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。
 
在用“equals()”比较引用类型时,情况就比较复杂,甚至有些变态,容易掉进陷阱。
 
在Java API中,有些类重写了equals()方法,它们的比较规则是:当且仅当该equals方法参数不是 null,两个变量的类型、内容都相同,则比较结果为true。这些类包括:String、Double、Float、Long、Integer、 Short、Byte、、Boolean、BigDecimal、BigInteger等等,太多太多了,但是常见的就这些了,具体可以查看API中类的 equals()方法,就知道了。
 
解析变态的Boolean类 :在这些类中,最最变态的是要数Boolean类了,我感觉是开发Boolean类的人员头脑进水了。我也不想细说了,你有好四中方式来创建一个Boolean对象(两构造方法,两个静态方法valueOf(),推荐用静态方法)。
 
Boolean类的变态之处不在于其equals()方法。而是在于Boolean对象创建方法。其实Boolean类的对象最多有两个,其 toString()值分别是true和false。当且仅当用true或者"true"创建的Boolean类为同一个对象且toString()值为 true。其他的字符串或者false创建的Boolean对象的值一律相等且toString()值为false。
 
三、重写equals()方法
 
在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法。重写的一般规则是:
 
1、先用“==”判断是否相等。
 
2、判断equals()方法的参数是否为null,如果为null,则返回false;因为当前对象不可能为null,如果为null,则不能调用其equals()方法,否则抛java.lang.NullPointerException异常。
 
3、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false,否则继续判断。
 
4、判断类的成员是否对应相等。往下就随意发挥了。呵呵!
 
 
四、总结
 
“==”比较对象是否引用了同一个对象,或者比较简单类型变量值是否相等。
Object类的equals()方法用来比较是否一个对象(内存地址比较),可以重写。
JDK中有些类重写了equals()方法,只要类型、内容都相同,就认为相等。
很变态的Boolean类,仅存在两个实例。具体可查看API。
一般来说,一个类如果涉及到比较,应该重写equals()方法,因为内存地址比较没有意义。


分享到:
评论

相关推荐

    Java对象属性数据比较,返回变化数据

    总结起来,`Java对象属性数据比较,返回变化数据`这个主题涉及到Java的面向对象特性,包括对象、属性、以及反射API的使用。`ObjectCompareUtil`工具类提供了一种通用的方式来比较两个对象的属性,而`...

    深入java虚拟机.pdf

    深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。 一...

    MLDN魔乐JAVA_09深入引用、this关键字、对象比较.rar

    在Java编程语言中,深入理解和熟练运用引用、`this`关键字以及对象比较是提升编程技能的关键环节。本课程“MLDN魔乐JAVA_09深入引用、this关键字、对象比较”将带你深入探讨这些核心概念。 首先,让我们来讨论...

    java面向对象编程源码

    本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于...通过深入理解和实践这些知识点,开发者可以构建出高效、稳定且易于维护的Java应用程序。

    xml转换java对象

    XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于软件开发、Web服务和数据存储等领域。...通过深入学习和实践,你可以更好地掌握XML到Java对象的转换技巧,提升你的开发效率。

    深入JAVA虚拟机 随书源码 JVM规范

    首先,我们来看《深入JAVA虚拟机》这本书,它涵盖了JVM的各个关键方面,包括指令集、运行时数据区、方法区、堆内存、栈帧结构、编译与优化、异常处理和安全性等。书中通过实例解析,帮助读者理解JVM如何处理Java程序...

    精通Hibernate:Java对象持久化详解.zip

    《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...

    深入浅出Java 2面向对象程序设计(PDG)

    《深入浅出Java 2面向对象程序设计》是一本针对Java编程初学者和进阶者的重要教程,旨在帮助读者深入理解和掌握面向对象编程的核心概念和技术。面向对象编程(Object-Oriented Programming,简称OOP)是Java语言的...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...

    《Java程序设计案例教程》教学课件05深入Java面向对象.pdf

    《Java程序设计案例教程》教学课件05深入Java面向对象.pdf《Java程序设计案例教程》教学课件05深入Java面向对象.pdf《Java程序设计案例教程》教学课件05深入Java面向对象.pdf《Java程序设计案例教程》教学课件05深入...

    深入Java对象及元素的存储区域

    在JAVA平台上开发应用程序的时候,有一个很大的特点就是其是在应用程序运行的时候才建立对象。换句话说,在程序运行的时候,才会最终确定对象的归属,即对象应该存储在什么地方。由于存储在不同的区域,其在性能上会...

    java-对象数组转换为json

    下面将深入探讨如何在Java中实现对象数组向JSON的转换,并反过来将JSON字符串转换为Java对象数组,同时也会提及一些相关技术和代码示例。 ### Java对象数组转JSON 首先,我们来看如何将一个Java对象数组转换成JSON...

    Gson读取java对象

    本文将深入探讨如何使用Gson库来读取和转换Java对象为JSON格式。 首先,我们需要理解Java对象到JSON的转换过程。Gson库提供了`Gson`类,它是核心转换器,可以通过调用其`toJson()`方法将Java对象转换成JSON字符串。...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...

    深入探索Java对象的序列化

    深入探索Java对象的序列化 对象序列化就是把对象写入到输出流中,用来存储或者传输。 对象的反序列化就是从输入流中读取对象。 要序列化的对象应该实现Serializable接口。 Serializable接口是一个标识接口,...

    Java面向对象应用程序开发

    在这个话题中,我们将深入探讨Java语言的基础,面向对象编程的概念,以及如何运用这些知识进行实际应用的开发。 首先,我们需要了解Java的基础知识。Java是一种静态类型的、强类型的编程语言,它的语法结构与C++...

    面向对象编程:C++与Java比较教程 英文版

    本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...

    java面向对象深入

    不错的java面向对象文档,对初学者帮助很大,快快下载吧

Global site tag (gtag.js) - Google Analytics