- 浏览: 88743 次
- 性别:
- 来自: 广州
最新评论
昨天说了布朗运算,今天详细解释一下其中的==运算符和Object的equals方法。
首先,在说这些之前,我们来补充说明一下JAVA的数据类型。在JAVA里面,有2种数据类型,第一种叫primitive(简单数据类型),另一种是Object.
简单数据类型的特点是:
1)类名是关键字
2)没有包名,没有方法可以访问,不是Object的子类
可以看出,这类数据是常用的数据,而且为了节省空间,它们没有继承Object,去除类多于的方法,节省了内存空间。
常用的简单数据类型包括:
int,long,short,double,float,byte,char,boolean,void
关于其可存储的数值范围大家可以去网上搜索
需要特别说明的是,void只适用于定义函数返回类型,不能用于运算。
为什么会提及简单类型运算呢?因为要说明==运算符和equals方法,会涉及到它们。
我们首先看看以下代码:
相信大家可以马上回答上面的输出结果是true
接下来,我们可以看看JDK1.5的新特性:简单数据类型和对象类型数据的比较:
上面的结果也是true哦,因为jdk1.5很只能的能把基础数据类型转换为对应的对象,然后再进行值比较。
为了更好地让大家了解这个改进,我来演示以下上述的代码在1.4时代要怎么实现:
简单类型在以前一定要先转换为对象才可以和对象比较哦,当然你把对象转换为简单类型比较更加保险。
为什么?因为以下对象之间的比较使用==和equals方法往往是不一样的。
equals方法,是Object的一个public方法,用于对比两个对象之间的值的异同。那它和==比较有什么不同呢?当==用于对象之间的比较时,类似于C的===,比较的是两个对象的hashCode。而这个hashCode是由存储对象的地址位得来的,为了保证每个对象的唯一性。在Object里面我们可以通过hashCode()来查看当前实例的hashCode代码。
来看看Object.equals(Object)代码:
然后它的说明里面已经说明了这个方法是对比两个对象的hashCode返回的值。理论上,每个new出来的Object之间的hashCode是不一样的:
你可以看到这个例子里面,两个hashCode是不一样的。
所以,对于对象值的比较,我们建议大家调用equals方法,并且如果你的类如果涉及到对比运算的话,也最好重写这个方法,实现你的比较逻辑。
让我们最后来看看Integer.equals(Object)方法
所以,如果我们直接用==对比两个Integer类,实际上会去对比两个实例的hashCode,而且调用的不是Integer类本身的hashCode,而是Object父类的hashCode。可以看看下面的两端代码:
首先是Integer的hashCode方法
这个value就是Integer保存的int值,这个理论上来说,会使以下的代码显示true:
但是实际上我们发现了,实际最后的结果是false。而且从第一行和第二行显示的内容可以知道a.hashCode()和new Integer(1).hashCode()都是1。
所以我们就清楚了以下几点:
1)==用于进行简单数据类型之间的比较
2)==用于比较两个对象是否同一实例
3).equals方法用于比较两个对象的值,我们可以根据实际需要重写特定对象的equals()方法以实现同类对象之间的特定比较逻辑。
今天到此为止,明天谈谈类型强转。
首先,在说这些之前,我们来补充说明一下JAVA的数据类型。在JAVA里面,有2种数据类型,第一种叫primitive(简单数据类型),另一种是Object.
简单数据类型的特点是:
1)类名是关键字
2)没有包名,没有方法可以访问,不是Object的子类
可以看出,这类数据是常用的数据,而且为了节省空间,它们没有继承Object,去除类多于的方法,节省了内存空间。
常用的简单数据类型包括:
int,long,short,double,float,byte,char,boolean,void
关于其可存储的数值范围大家可以去网上搜索
需要特别说明的是,void只适用于定义函数返回类型,不能用于运算。
为什么会提及简单类型运算呢?因为要说明==运算符和equals方法,会涉及到它们。
我们首先看看以下代码:
package operator; public class EqualComparation { public static void main(String[] args) { int a=1; int b=1; System.out.println(a == b); } }
相信大家可以马上回答上面的输出结果是true
接下来,我们可以看看JDK1.5的新特性:简单数据类型和对象类型数据的比较:
package operator; public class EqualComparation { public static void main(String[] args) { Integer a=1; int b=1; System.out.println(a == b); } }
上面的结果也是true哦,因为jdk1.5很只能的能把基础数据类型转换为对应的对象,然后再进行值比较。
为了更好地让大家了解这个改进,我来演示以下上述的代码在1.4时代要怎么实现:
package operator; public class EqualComparationForJDK14 { public static void main(String[] args) { Integer a= Integer.valueOf(1); int b=1; System.out.println(a.equals(Integer.valueOf(b))); } }
简单类型在以前一定要先转换为对象才可以和对象比较哦,当然你把对象转换为简单类型比较更加保险。
为什么?因为以下对象之间的比较使用==和equals方法往往是不一样的。
equals方法,是Object的一个public方法,用于对比两个对象之间的值的异同。那它和==比较有什么不同呢?当==用于对象之间的比较时,类似于C的===,比较的是两个对象的hashCode。而这个hashCode是由存储对象的地址位得来的,为了保证每个对象的唯一性。在Object里面我们可以通过hashCode()来查看当前实例的hashCode代码。
来看看Object.equals(Object)代码:
public boolean equals(Object obj) { return (this == obj); }
然后它的说明里面已经说明了这个方法是对比两个对象的hashCode返回的值。理论上,每个new出来的Object之间的hashCode是不一样的:
package object; public class HashCodeDemo { public static void main(String[] args) { Object a = new Object(); Object b = new Object(); System.out.println(a.hashCode()); System.out.println(b.hashCode()); } }
你可以看到这个例子里面,两个hashCode是不一样的。
所以,对于对象值的比较,我们建议大家调用equals方法,并且如果你的类如果涉及到对比运算的话,也最好重写这个方法,实现你的比较逻辑。
让我们最后来看看Integer.equals(Object)方法
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
所以,如果我们直接用==对比两个Integer类,实际上会去对比两个实例的hashCode,而且调用的不是Integer类本身的hashCode,而是Object父类的hashCode。可以看看下面的两端代码:
首先是Integer的hashCode方法
public int hashCode() { return value; }
这个value就是Integer保存的int值,这个理论上来说,会使以下的代码显示true:
Integer a =1; System.out.println(a.hashCode()); System.out.println(new Integer(1).hashCode()); System.out.println(a == new Integer(1));
但是实际上我们发现了,实际最后的结果是false。而且从第一行和第二行显示的内容可以知道a.hashCode()和new Integer(1).hashCode()都是1。
所以我们就清楚了以下几点:
1)==用于进行简单数据类型之间的比较
2)==用于比较两个对象是否同一实例
3).equals方法用于比较两个对象的值,我们可以根据实际需要重写特定对象的equals()方法以实现同类对象之间的特定比较逻辑。
今天到此为止,明天谈谈类型强转。
发表评论
-
JAVA简单教程:数据库操作(三)——PreparedStatement和动态SQL
2010-03-12 12:30 8686如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2168今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1902最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1547今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1601最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:类型强转
2010-01-19 11:56 7612关于类型,我们说了不 ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2276布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1089今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1507自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2084现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:super和this
2010-01-05 11:49 1576因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。 ... -
每天简单JAVA教学:变量
2009-12-28 16:02 1259很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 4022昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2606今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9561昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1278继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1581上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1545以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
Java 数据类型和 MySql 数据类型对应表 在 Java 编程中,了解 Java 数据类型和 MySql 数据类型的对应关系非常重要。这是因为在 Java 应用程序中,我们经常需要与数据库进行交互,而 MySql 是一种常用的关系数据库...
Java 数据类型和 MySql 数据类型对应一览 在 Java 编程语言中,数据类型是指变量或函数可以持有的值的类型。 MySql 数据库也具有其自己的数据类型,用于存储和管理数据。在本文中,我们将对 Java 数据类型和 MySql ...
SQL Server 数据库类型对应 Java 中的数据类型 SQL Server 是一个关系数据库管理系统,Java 是一个广泛使用的编程语言。在 Java 中,对数据库的操作需要通过 JDBC(Java Database Connectivity)来实现,而在 JDBC ...
Java的简单数据类型主要分为四类:实数、整数、字符和布尔值。实数包括`float`和`double`,它们分别占用4字节和8字节,用于表示浮点数,遵循IEEE 754标准。整数类型包括`byte`、`short`、`int`和`long`,它们的大小...
### MySQL与Java数据类型对应详解 #### 概述 在进行数据库操作时,尤其是在使用Java进行MySQL数据库开发的过程中,正确地映射数据类型是至关重要的一步。本文将详细介绍MySQL中的各种数据类型及其在Java中的对应...
Java程序设计:2 基本数据类型与基本操作1.ppt
在Java中,变量是存储数据的容器,每个变量都有特定的数据类型,决定了它可以存储的值的范围和类型。声明变量的基本语法如下: ```java 数据类型 变量名; ``` 例如,`double salary;`声明了一个double类型的变量...
总结来说,这个Eclipse工程展示了如何使用Java和Apache POI库解析Excel文件,并针对单元格的数据类型进行判断,这对于处理大量结构化数据的应用场景非常实用。通过学习和理解这个项目,开发者可以掌握处理Excel数据...
引用数据类型包括类、数组、接口等,它们不直接存储值,而是存储指向存储这些值的地址的引用。例如: - **类** (`Class`):用户自定义的数据类型,用于封装数据和行为。 - **数组** (`Array`):用于存储固定数量的...
在Java编程语言中,数据类型是程序设计的基础,它决定了变量可以存储的值的种类和范围。本资源“JAVA数据类型思维导图”提供了一种直观的方式来理解和记忆Java中的数据类型,包括基本数据类型和引用数据类型。下面将...
本实验报告将介绍Java中的基本数据类型、数据类型转换、控制台输入输出方法和对话框输入输出方法。 一、基本数据类型 Java中的基本数据类型包括整型(int)、浮点型(float、double)、布尔型(boolean)、字符型...
个人java学习项目一:简易拼图游戏.zip个人java学习项目一:简易拼图游戏.zip 个人java学习项目一:简易拼图游戏.zip个人java学习项目一:简易拼图游戏.zip 个人java学习项目一:简易拼图游戏.zip个人java学习项目一...
资源名称:Java编程基础知识变量与数据类型资源目录:【】11957c6aed0bbd30e284837b53bc3a6f【】2.Java编程基础知识变量与数据类型1.数据类型初阶【】2.Java编程基础知识变量与数据类型10.浮点类型【】2.Java编程...
Oracle9i 数据类型、Java 数据类型以及 Schema 类型之间的对比主要关注它们在存储和处理数据时的差异。这些数据类型是编程和数据库管理中的基础,理解它们的关系对于开发与数据库交互的应用程序至关重要。 1. ...
Java 和 MySQL 数据类型之间的对比是理解数据库操作和应用程序开发中数据处理的关键。这两种语言的数据类型在功能和使用上都有所不同,尽管它们都用于存储和处理数据,但各自有着特定的适用场景和特点。 首先,Java...
对于初学者来说,理解并掌握 Java 的基本数据类型和变量的声明至关重要。本文将深入探讨 Java 中的数据类型以及如何声明变量。 Java 提供了八种基本数据类型,它们分为两大类:整型和浮点型,以及两种布尔类型和一...
数据类型决定了变量可以存储的值的种类和大小,而运行时常量池则是Java虚拟机(JVM)内存模型中的一个重要组成部分。 首先,让我们详细讨论Java的数据类型。Java的数据类型分为两大类:基本数据类型和引用数据类型...
在Java中,Jython是一个非常有用的工具,它允许我们在Java应用程序中嵌入Python代码,并能够无缝地在Python数据类型和Java数据类型之间进行转换。这极大地扩展了Java的生态系统,让我们能够利用Python丰富的库和简洁...
- **内容概述**:这一章节会详细介绍Java中的各种数据类型,包括整型、浮点型、字符型等,以及如何声明和使用这些类型的变量。 - **学习目标**:让学生掌握Java中不同数据类型的用法,以及变量的定义和使用。 4. ...
JAva基本的数据类型和基本操作相关源代码打包,像一些标识符、变量、赋值语句和赋值表达式、算术运算符、数值类型转换、字符数据类型及其运算、特殊字符的转义序列表示、字符型char数据与数值型数据之间的转换、从...