java基础巩固系列(六):java中equals()方法与==的比较
2014-08-24 17:12
218 查看
equals()方法是在java.lang.Object类下边的一个方法,API文档解释如下:
指示其他某个对象是否与此对象“相等”。
自反性:对于任何非空引用值
对称性:对于任何非空引用值
传递性:对于任何非空引用值
一致性:对于任何非空引用值
对于任何非空引用值
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
有两种用法说明:
(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。
比如:
String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");
那么:
s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,
故不相等。
s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
注意(1):
如果: StringBuffer s1 = new StringBuffer("a");
StringBuffer s2 = new StringBuffer("a");
结果: s1.equals(s2) //是false
解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
而Object类中的equals方法是用来比较“地址”的,所以等于false.
注意(2):
对于s3和s4来说,有一点不一样要引起注意,由于s3和s4两个字符串常量所生成的变量,其中所存放的内存地址是相等的,
所以s3==s4是true(即使没有s3=s4这样一个赋值语句)
(2)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其
对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
比如:
class A
{
A obj1 = new A();
A obj2 = new A();
}
那么:obj1==obj2是false
obj1.equals(obj2)是false
但是如加上这样一句:obj1=obj2;
那么 obj1==obj2 是true
obj1.equals(obj2) 是true
总之:equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较
其指向的对象是否相同的。
== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。
equals
public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
equals方法在非空对象引用上实现相等关系:
自反性:对于任何非空引用值
x,
x.equals(x)都应返回
true。
对称性:对于任何非空引用值
x和
y,当且仅当
y.equals(x)返回
true时,
x.equals(y)才应返回
true。
传递性:对于任何非空引用值
x、
y和
z,如果
x.equals(y)返回
true,并且
y.equals(z)返回
true,那么
x.equals(z)应返回
true。
一致性:对于任何非空引用值
x和
y,多次调用 x.equals(y) 始终返回
true或始终返回
false,前提是对象上
equals比较中所用的信息没有被修改。
对于任何非空引用值
x,
x.equals(null)都应返回
false。
Object类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值
x和
y,当且仅当
x和
y引用同一个对象时,此方法才返回
true(
x == y具有值
true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
有两种用法说明:
(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。
比如:
String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");
那么:
s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,
故不相等。
s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
注意(1):
如果: StringBuffer s1 = new StringBuffer("a");
StringBuffer s2 = new StringBuffer("a");
结果: s1.equals(s2) //是false
解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
而Object类中的equals方法是用来比较“地址”的,所以等于false.
注意(2):
对于s3和s4来说,有一点不一样要引起注意,由于s3和s4两个字符串常量所生成的变量,其中所存放的内存地址是相等的,
所以s3==s4是true(即使没有s3=s4这样一个赋值语句)
(2)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其
对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
比如:
class A
{
A obj1 = new A();
A obj2 = new A();
}
那么:obj1==obj2是false
obj1.equals(obj2)是false
但是如加上这样一句:obj1=obj2;
那么 obj1==obj2 是true
obj1.equals(obj2) 是true
总之:equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较
其指向的对象是否相同的。
== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。
相关文章推荐
- java基础巩固系列(十一):java测试程序运行时间的两种方法
- Java基础(二):==和Equals方法的比较
- java基础解析系列(十一)---equals、==和hashcode方法
- java基础巩固系列(五):ArrayList与HashSet的比较,以及HashCode分析
- 【java基础】==与equals()方法比较
- java基础巩固系列(十):String、StringBuffer、StringBuilder的使用与比较
- 第2章 Java编程基础——FAQ2.21 ==和equals()都可用于比较两个操作数是否相等, 它们有什么区别吗?
- java中equals方法和“==”的比较
- Java进阶:深入equals方法对象相等比较
- toCharArray()方法 和 Java中比较两个字符串是否相等equals方法
- java中equals方法和“==”的比较
- "=="和equals方法究竟有什么区别? —— Java经典面试题系列
- Java基础复习:Object类中的toSting()和equals()方法
- java基础问题----"=="和equals方法究竟有什么区别
- java中equals方法和“==”的比较
- java中equals方法和“==”的比较
- J2SE基础夯实系列之hashcode和equals方法详细解析, hashmap对于hashcode方法的使用
- JAVA中==和equals方法 比较
- Java中equals方法比较的是什么?
- java中equals方法和“==”的比较