equals与==之间的区别

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

equals与==之间的区别
1. 简单数据类型的比较
在java中!简单数据类型的比较是通过==
来进行的。在比较中!只要表达式两边的“值”是相
等的!那么表达式的结果就是true!否则为false。
2. 复杂数据类型的比较
复杂数据类型的比较可以采用“==”,也可以采用"equals"方法进行比较.
如:
Object a = new Object();
Object b = new Object();
a==b 的结果应返回false。因为"=="在比较复
杂数据类型的时候(比较的是是否是同一个对象(
只有两个变量指向的是同一个对象的时候( 才能
返回true. 也就是说(在比较的时候(也比较了对象
的地址信息. 只有地址相同的对象才能够返回
true. 而new运算符在每一次运算时(都将会产生
一个新的对象( 每一个新的对象都有自己的内存
和地址. 所以上文代码的比较结果是false。
如果将代码改写为如下形式:
Object a = new Object();
Object b = a;
那么a==b 的结果将返回true.
如果使用equals()方法,那么应注意该方法是
在哪一个类中实现的, 以及该方法实现的具体形
式.在类Object中,该方法的比较与"=="的比较具
有同样的效果.如下代码将输出false.
public static void main(String args[])
{
Object a = new Object();
Object b = new Object();
System.out.println(a.equals(b));
}
但是,如果比较的数据类型不是Object,而是
其他的数据类型String,StringBuffer 以及各
种包裹类等,这些类中重写了Object类中的函数
equals(),所以在调用equals()方法时将跟据多态
的规则来进行调用,而不一定是要使用Object类
中定义的equals()方法.如下例代码将输出true.
public static void main(String args[])
{
String a = new String("hello");
String b = new String("hello");
System.out.println(a.equals(b));
}

此时调用的是String类中的函数equals(),所
以比较的结果就不同了,它比较时只比较对象的
内容,也就是说,只要字符串中的每一个字符对应
相等,那么字符串对象是相等的,而不管对象的地
址是否相同,对象是否是同一个对象.
上例代码改写为如下形式,将依然返回false.
public static void main(String args[])
{
String a = new String("hello");
String b = new String("hello");
System.out.println(a==b);
}
由此可以看出,equals()方法的重写不影响
"=="的比较规则.
在String类中,除了重写了一个equals()函数
来进行比较外,还有一个函数也可以用于字符串
的比较equalsIgnoreCase(),它的比较规则是只要
字符串对象的对应字符是相等的,那么对象是相
等的,而且,在比较对应的字符的时候,认为大写
字母与小写字母是相等的,如下代码输出true.
public static void main(String args[])
{
String a = new String("HELLO");
String b = new String("hello");
System.out.println(a.equalsIgnoreCase(b));

}

相关文档
最新文档