您的位置:首页 > 其它

equals与==之间的区别

2015-07-26 19:22 246 查看
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));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: