==和equals是不等价的
指示其他某个对象是否与此对象“相等”。
对于字符串的创建比较特殊,因为字符串还有一个字符串池的概念:
String str1="abc";
String str2="abc";
System.out.println(str1==str2);//此时会返回true
另外一种写法是:
String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1==str2);//此时会返回false
这就是字符串池的知识了,如果是原始类型的话,其实用==和用equals基本上都等得到同样的结果,
建议判断两个引用类型的话,最好用equals方法。
equals 方法在非空对象引用上实现相等关系: (以下是equals方法在javaSE中的原话)
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 |