Java中 == 和 equlas() 的区别
来源:互联网 发布:mac如何卸载梦幻西游 编辑:程序博客网 时间:2024/05/20 19:45
“==” 用来比较两个变量的值是否相等。具体而言:
>>如果两个变量是基本数据类型,使用“==”来比较其对应的值是否相等。
>>如果变量指向的数据是对象,那么用“==”可以比较这两个对象是否指向同一个对象。(但是不能比较两个对象的内容是否相等)
equals是Obeject类中的方法,没有覆盖过的equals方法会直接使用“==”比较两个对象的引用是否相等。
但当equals被覆盖,就可以让它比较对象的内容是否相等,比如string对象。
看一下Java中String对象到底是如何覆写equals()方法的:
public boolean equals(Object anObject) { if (this == anObject) { //引用相等,指向的同一个对象,肯定是相等的。 return true; } if (anObject instanceof String) { //判断是否是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) { //转化为char字符串,然后挨个判断值是否相等 if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
下面就是这类问题常考的经典题目了:
1、下面这段代码的输出是什么?
public class EQUals {public static void main(String[] args) {Integer i1=127,i2=127,i3=128,i4=128;System.out.println(i1==i2);System.out.println(i1.equals(i2));System.out.println(i3==i4);System.out.println(i3.equals(i4));}}
2、下面这段代码的输出是什么?
public class EQUals {public static void main(String[] args) {String s1="Hello";String s2=new String("Hello");String s3=s2;String s4=s3.intern();System.out.println(s1==s2);System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));System.out.println(s2==s3);System.out.println(s3==s4);System.out.println(s3.equals(s4));}}
解析:
第一题的答案是:
true:基本类型是判断值相等。
true:Integer的euqlas方法是直接调用 ==的:
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
false:JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为Integer i=127时,在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 128,所以地址不一样。
true:同上,equals比较的是 intValue。
第二题的答案是:
false :s1和s2引用对象不同。
true:s1和s2的值相同。
true:s1和s3的值相同。
true :s2和s3引用对象相同。
false:当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。
true:同上。
1 0
- Java中 == 和 equlas() 的区别
- Java中==与equlas的区别
- JavaSE equlas和==的区别
- java中的“==”与equlas的区别
- hashcode和equlas、==的一些区别
- java——==、equlas和null
- java的equlas()方法与==运算符浅析
- 【学习心得】-小思JAVA中“equlas”与“==”在判断语句中的不同
- java中“+”和“+=”的的区别
- Integer中equlas()方法的运用与问题总结
- Java中 = 和 += 的区别
- java中+=和=的区别
- Java中 = 和 += 的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java 中 equals 和 == 的区别和联系
- Error: Failed to synchronize cache for repo 'fedora'
- P1034 矩形覆盖
- Linux用户和组的管理
- Cesium热力图实现
- [DP]暗黑破坏神
- Java中 == 和 equlas() 的区别
- MyFlag Step3: 界面设计初步
- 乐学成语
- lca的tarjan算法(离线)
- Flipper (栈模拟)
- 搭建SSM框架
- NVIDIA Jetson TX1 系列开发教程之二:刷机与开发前准备
- php获取文件扩展名的6种方法
- 快速理解和使用 ES7 await/async