`

操作符“==”与对象的equals()方法

阅读更多

    很多时候都会用到类型或者是对象是否相等的比较应用,需要总结一下。

    操作符“==”是用来比较两个操作元是否相等,两个操作元可以是基本类型,也可以是引用类型,如果是引用类型变量,两个变量必须是同一个对象,结果才是true。

举例如下:

 int i1= 1,i2=2,i3=1;
 boolean b1=false,b2=true,b3= false;
 String s1="test",s2 ="test_2",s3="test",s4;
 s4 = new String("test");
 System.out.println("i1==i2:"+(i1==i2)+" i1==i3:"+(i1==i3));
 System.out.println("b1==b2:"+(b1==b2)+" b1==b3:"+(b1==b3));
 System.out.println("s1==s2:"+(s1==s2)+" s1==s3:"+(s1==s3)+" s1==s4:"+(s1==s4));

 

输出:

i1==i2:false i1==i3:true
b1==b2:false b1==b3:true
s1==s2:false s1==s3:true s1==s4:false
   对于equals()方法,java.io.Object类中定义了equals方法,用来比较两个对象是否相等。其实在对象是否相等的问题上,==和equqls()是效果一样的,但是由于JDK类中有一些类覆盖了oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)。 举例如下:

    Integer int1 = new Integer(1);
 Integer int2 = new Integer(1);
 
 String str1 = new String("test");
 String str2 = new String("test");
 System.out.println("int1==int2:"+(int1==int2)+" int1.equals(int2):"+int1.equals(int2));
 System.out.println("str1==str2:"+(str1==str2)+" str1.equals(str2):"+str1.equals(str2)); 

输出:

int1==int2:false int1.equals(int2):true
str1==str2:false str1.equals(str2):true

 

    注意:对于那些没有覆盖equals()的类,功能应用还是一样的

分享到:
评论
2 楼 ccfangle 2011-07-27  
bestchenwu 写道
什么时候用“==”还是“equals()”,跟你是把这个对象作为值对象(例如:Integer)还是一个简单的引用对象(例如java.util.Random)来处理,这才是问题的本质

不是说写一个类就要覆盖equals()方法,如果你这个类的对象永远不用于集合类(java.util包下面),那么完全不用覆盖

关于这点推荐你阅读下<<Effective Java>>,里面有一章专门讲解equals、hashCode方法如何使用~~

呵呵~很有道理,讨论层次比较深啦~我知道覆盖equals是部分类进行了这样的操作,如果要想覆盖equals,那么hashCode()也是需要覆盖~至于更深层次的含义,有待深入了解......
1 楼 bestchenwu 2011-07-27  
什么时候用“==”还是“equals()”,跟你是把这个对象作为值对象(例如:Integer)还是一个简单的引用对象(例如java.util.Random)来处理,这才是问题的本质

不是说写一个类就要覆盖equals()方法,如果你这个类的对象永远不用于集合类(java.util包下面),那么完全不用覆盖

关于这点推荐你阅读下<<Effective Java>>,里面有一章专门讲解equals、hashCode方法如何使用~~

相关推荐

    ==和equals方法究竟有什么区别

    对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。  equals方法是用于比较两个独立对象的内容是否相同,就好比去...

    ==和equals() 的比较

    ==和 equals ()都是用于相等型判断的操作符 == 操作符用来判断两个引用是否指的同一个对象,或两个简单类型的值是否相等 即: [ == 比较值类型数据,比较的是值, 而引用类型对象比较的是地址] equals() 方法用来判断...

    详解C#中==、Equals、ReferenceEquals的区别

    本文导读: ...=,这个符号是一个可以重载的二元操作符,可以用于比较两个对象是否相等。 2、它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。 3、对于引用对象比较其引

    Java笔记(9)类型转换与包装类

    文章目录Java笔记(9)类型转换与包装类对象类型转换(Casting)基本数据类型的Casting:对Java对象的强制类型转换称为造型==操作符与equals方法==:equals():String对象的创建代码练习题包装类(Wrapper)基本数据...

    Java学习路线:day13

    文章目录第四章 面向对象(中)面向对象特征之三:多态性向下转型的使用多态性的练习Object 类的使用Object类中的主要结构==操作符与equals方法重写equals()方法的原则toString的使用包装类(Wrapper)的使用单元测试...

    java六大必须理解的问题-来自网络少许有误(非常适合初学者).doc

    对于这个系列里的问题,每个学Java的人都应该搞懂。...诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。 对象内容的比较,正是equals方法做的事。

    Java 2023最新面试知识点总结.pdf

    《Think in Java》中说:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。 "=="判断的是两个对象的内存地址是否一样,适用于原始数据类型和枚举类型(它们的变量存储的是值本身,而引用...

    Java初学者都必须理解的六大问题

    诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。  对象内容的比较,正是equals方法做的事。  看一下Object对象的equals方法是如何实现的:  boolean...

    java初学者必须理解的6大问题

    问题一:我声明了什么!  String s = "Hello world!";  许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是... ==操作符专门用来比较变量的值是否相等。比较好理解的一点是:

    Java的六大问题你都懂了吗

    这很类似==操作符:==操作符只负责引用的"值"相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证...

    【05-面向对象(下)】

    •Object类提供的equals方法判断两个对象相等的标准与==完全相同。因此开发者通常需要重写equals方法。 类成员 •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用...

    安卓java读取网页源码-AndroidInterview:Android面试常见问题

    在用关系操作符 == 比较的是值本身;equals 比较两个对象的引用是否相等,即 是否指向同一个对象;hashCode 用来鉴定两个对象是否相等,Object类中的hashCode方法返回对象在内存中地址转换成的一个int值,所以如果...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    4.1.7 语句与方法调用的比较 108 4.2 方法的声明 108 4.2.1 形式参数声明 109 4.2.2 方法返回类型声明 110 4.3 using指令 111 4.4 Main()的返回值和参数 114 4.5 方法的参数 116 4.5.1 ...

    net学习笔记及其他代码应用

    1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。...47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可...

    C#全能速查宝典

    1.4.10 Equals方法——比较两个字符串对象 53 1.4.11 First函数——返回查询结果的第一个记录 55 1.4.12 FirstDayOfWeek属性——获取或设置一周中的第一天 56 1.4.13 Format方法——格式化字符串 56 1.4.14 GETDATE...

    java7hashmap源码-java:Java

    day08_高级类特性1:多态特性、4中访问权限修饰符、this与super区别、==与equals方法区别、instanceof操作符 day09_高级类特性1:toString(方法)、包装类、static关键字 day10_高级类特性2:初始化块、抽象类、...

    NET设计规范-.NET约定、惯用法与模式.part2

    8.10.2 引用类型的相等性操作符 219 第9章 常用的设计模式 220 9.1 聚合组件 220 9.1.1 面向组件的设计 222 9.1.2 因子类型 224 9.1.3 聚合组件规范 224 9.2 Async模式 227 9.3 Dispose模式 232 ...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本...这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() ...

    NET设计规范-.NET约定、惯用法与模式.part1

    8.10.2 引用类型的相等性操作符 219 第9章 常用的设计模式 220 9.1 聚合组件 220 9.1.1 面向组件的设计 222 9.1.2 因子类型 224 9.1.3 聚合组件规范 224 9.2 Async模式 227 9.3 Dispose模式 232 ...

    java编程基础,应用与实例

    第7章 对象与方法 99 7.1 对象的创建与销毁 99 7.2 值传递调用 102 7.3 引用传递调用 103 7.4 获取命令行参数 105 7.5 返回对象引用 106 7.6 返回新对象 107 7.7 自引用 108 7.8 递归调用 111 7.9...

Global site tag (gtag.js) - Google Analytics