标签:
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。
标签:
原文地址:http://www.cnblogs.com/tiantain1015/p/4906317.html