Java中==与equals方法的区别
来源:互联网 发布:阿里云手机云空间 编辑:程序博客网 时间:2024/06/05 21:12
Java中进行变量的比较时,根据变量的类型的不同选择使用==或是eauals方法进行比较。
1.==比较的是对象的物理地址,若两个变量的物理地址相同,那么这两个变量的值肯定是相同的。Java中的基本数据类型(8种:byte,short,char,int,long,float,double,boolean)在比较时应使用==运算符。
2.equals方法出自Object类,Object类是所有类的顶级父类,也就是说所有的类都直接或间接的继承了Object类中的equals方法,在Object类中equals方法比较的是两个变量的物理地址,下面是Object类中equals方法的实现代码:
public boolean equals(Object obj) { return (this == obj); }
发现,其是使用==实现的。
有些类在继承Object类时覆写了equals方法,使得该方法在不同的类中表现不一致,如String类中的equals方法:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
在String类的equals方法中先使用了==进行比较,若两个变量的物理地址一样,则两个变量的值肯定相等 ;接下来比较了两个变量的长度,若长度不一致,那么这两个变量的值肯定不相等,直接返回false;若长度相等,代码中又进行了逐位进行比较的操作。
对于除基本数据类型之外的类,用==进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
在创建Java实体类时若没有覆写equals方法,比较时将使用Object类的equals方法,比较结果和==一致。所以,一般会覆写equals方法,采用类似与String类中equals方法的实现。
但是对于String类有个特殊的概念——字符串缓冲池
总结:
1.==比较的是两个对象的内存地址;
2.equals比较的是两个对象的字面值;
3.字符串缓冲池在内存中,String类变量比较特殊;
4.在创建实体类时,需要覆写equals方法,不然使用的仍是Object类中的equals方法(底层使用==实现)。
- Java中"=="与equals()方法的区别
- Java中"=="与equals()方法的区别
- Java中"=="与equals()方法的区别
- Java中==与equals方法的区别
- Java 中 == 与 equals() 方法的区别
- java中 equals()方法 与 “==”的区别
- java中 ==与equals方法的区别
- Java中==号与equals()方法的区别
- Java中==与equals方法的区别
- (java)String 中 ==与equals方法 的区别
- Java中equals()方法与"=="的区别
- Java中==与equals的区别(可以试下重写hashcode与equals方法)
- 【java中==与equals的区别】java中==与equals的区别
- Java 中equal() 方法与==的区别以及 equals()与 hashCode()方法重写
- JAVA中“==”与equals()方法区别
- Java中,equals()方法与"=="区别小实例
- java中==与equals()方法的区别与使用
- C#中==与Equals方法的区别
- Android的手势操作识别
- 国嵌数据结构视频笔记
- error: stray ‘\302’ in program 处理
- 数据结构--1、线性表
- 关于编译性语言、解释性语言和脚本语言,动态语言,静态语言的区别
- Java中==与equals方法的区别
- Android层测试摄像头实际输出帧率大小
- Codeforces Experimental Educational Round: VolBIT Formulas Blitz D. Hexagons!
- OOA/OOD/OOP的区别
- android中finish()与system.exit(0)的区别?
- 数据结构之栈(四)
- 设计模式 命令模式 之 管理智能家电
- 图像模式
- SpringMVC中url-parden配置的问题和SpringMVC中js、css不生效问题