equals与==的区别:
equals用于检测两个对象的内容是否相等(即对中的内容是否相同)
==在用于比较基本数据类型时,两者值相同,比较结果为true
在用于比较引用时,若引用指向内存中的同一对象,比较结果为true(==比较的是栈中的内容是否相同)
为了更清楚的了解它们的工作过程,先来看看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; }
可以看到,equals默认调用了“==”比较方法,在传入参数为String类时,重写了这个方法,进行字符的逐个比较。所以,equals可以用来比较字符串是否相同。
所以,equals具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么它和==号等价。
下面测试两者的作用:
package test; public class Test { /** * @param args */ public static void main(String[] args) { String str1 = "world";// 直接赋值,该字符串放在常量池(在堆中)中 String str2 = new String("world") ; // 通过new赋值,新建了一个对象 String str3 = str2 ; // 传递引用,str放在栈内存中 System.out.println("str1 == str2 : " + (str1==str2)) ; System.out.println("str1 == str3 : " + (str1==str3)) ; System.out.println("str2 == str3 : " + (str2==str3)) ; System.out.println("======================================================"); System.out.println("str1 equals str2 : " + (str1.equals(str2))) ; System.out.println("str1 equals str3 : " + (str1.equals(str3))) ; System.out.println("str2 equals str3 : " + (str2.equals(str3))) ; } }
输出结果如下:
str1 == str2 : false 不是同一个对象,地址不同 str1 == str3 : false 不是同一个对象,地址不同 str2 == str3 : true 同一对象 ====================================================== str1 equals str2 : true str1 equals str3 : true str2 equals str3 : true
由于equals重写了比较方法,只比较两个字符串的值是否相同。
String str = "World";中,str放在栈内存中,“World”放在堆内存中,str是一个指向“World”首地址的引用。
相关推荐
能够加强对java中equals与==区别的理解。
equals与==的区别?equals和==有什么区别? Java解惑系列之一--equals和==之间究竟有什么区别 稍微学过一些java的同学都可能在网络上看到这样的一道题: 在java语言当中,equals和==之间究竟有什么区别? 而这道...
通过例子详细解释java中equals和==区别。实例丰富,适合初学者,便于理解,
在Java中,equals和hashCode方法是Object中提供的两个方法,这两个方法对以后的学习有很大的帮助,本文就深度来去讲解这两个方法。下面小编带大家来一起学习吧
= =和equals有什么区别? 答: = =是操作符号,对于基本类型来说比较的是值,对于引用类型来说,比较的是引用,也可以理解为内存地址。而equals方法是属于超类Object的方法,其实默认情况下也是用==比较,只是很多类...
在对字符串的相等判断,==判断的是地址是否相同,equal()判断的是字符值是否相同。大多数时候==跟equal()的结果都是相同的。
主要介绍了java中如何区分==和equals,文中讲解的非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 hashCode()和equals()定义在Object类中,这...
本篇文章是对Java中的字符串"=="与"equals"进行了详细的分析介绍,需要的朋友参考下
本案例代码将详细展示Object类的使用方法,并提供一些实际场景下的案例,以帮助开发者更好地理解和运用这些方法。 这份案例代码适合以下人群: Java初学者:如果你是刚开始学习Java编程,那么Object类是一个重要的...
问题二:"=="和equals方法究竟有什么区别? ==操作符专门用来比较变量的值是否相等。比较好理解的一点是: int a=10; int b=10; 则a==b将是true。 但不好理解的地方是: String a=new ...
对于理解java类有一些帮助,如java append方法,substring,还有“==”和equals的区别,最后还有说到一些关于正则表达式的介绍
问题二:"=="和equals方法究竟有什么区别? ==操作符专门用来比较变量的值是否相等。比较好理解的一点是: int a=10; int b=10; 则a==b将是true。 但不好理解的地方是: String a=new String("foo"); String...
问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底... 问题二:"=="和equals方法究竟有什么区别? ==操作符专门用来比较变量的值是否相等。比较好理解的一点是:
理解equals()方法的功能; 清楚Object类中的equals()方法原型 了解String类中的equals()方法原型 会模仿写Person类、Student类及Teacher类中的equals()方法; 会根据类的实例相等比较的性质写类的equals()方法。;...
1.总是用属性 (Property) 来代替可访问的数据成员 2.在 readonly 和 const 之间,优先使用 readonly 3....理解 ReferenceEquals, static Equals, instance Equals 和 比较运算符(==)之间的关系
学会这些java面试题让你吊打面试官!面试前看看,让你充满自信,不再惧怕面试官各种刁难。1.Java中内存管理及各区域内存储数据的生命周期? 2.JVM堆内存的分代管理以及垃圾回收流程?...10.==和equals的区别?。。。。。。
"=="和equals方法究竟有什么区别 String,StringBuffer,StringBuilder有什么区别 java中的数组是不是对象 数组初始化的方式有哪几种 length属性和length()方法有什么区别 finally块中的代码什么时候被执行 Java中的...
1、java中==和equals和hashCode的区别 2、int与integer的区别 3、String、StringBuffer、StringBuilder区别 4、什么是内部类?内部类的作用 5、进程和线程的区别 6、final,finally,finalize的区别 7、...