动手动脑

 1  
 2 public class StringEquals {
 3 
 4     
 5 /**
 6      * @param args the command line arguments
 7      */
 8     
 9     public static void main(String[] args) {
10         
11         String s1=new String("Hello");
12         
13         String s2=new String("Hello");
14 
15         
16         System.out.println(s1==s2);
17         
18         System.out.println(s1.equals(s2));
19 
20         
21         String s3="Hello";
22         
23         String s4="Hello";
24 
25           
26         System.out.println(s3==s4);
27         
28         System.out.println(s3.equals(s4));
29         
30     
31     }
32 
33 
34 }

我们知道所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的的内存地址,所以说使用Object的equals()方法是比较两个对象的内存地址是否相等,即若object1.equals(object2)为true,则表示equals1和equals2实际上是引用同一个对象。虽然有时候Object的equals()方法可以满足我们一些基本的要求,但是我们必须要清楚我们很大部分时间都是进行两个对象的比较,这个时候Object的equals()方法就不可以了,实际上JDK中,String、Math等封装类都对equals()方法进行了重写。

 equals 方法在非空对象引用上实现相等关系:

     1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。

     2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。

      3、传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。

      4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。

     5、 对于任何非空引用值 x,x.equals(null) 都应返回 false。  

posted @ 2015-10-24 11:10  天天1015  阅读(152)  评论(0编辑  收藏  举报