equals与==之间的区别

来源:互联网 发布:学摄影的书籍知乎 编辑:程序博客网 时间:2024/05/28 16:00
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)); 
}
2 0
原创粉丝点击