String 的 equals是重写的
== 比较:基本类型的话比较的是值本身,应用类型的话比较的是地址值;
equals比较:重写的话比较的是值本身,没重写的话比较的是地址值
地址值不相等,比较完地址值后会继续比较字符串的值
可以理解为equals比较的是具体的值,==比较的是地址
equals方法和hashcode的关系?
先通过hashcode来比较,如果hashcode相等,那么就用equals方法来比较两个对象是否相等
1、如果两个对象equals相等,那么这两个对象的HashCode一定也相同
2、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置
如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写
String s1 = "123";
String s2 = "123";
String s3 = new String("123");
System.out.println(s1==s2); //true
System.out.println(s1.equals(s2)); //true
System.out.println(s1==s3); //false: ==是比地址
System.out.println(s1.equals(s3)); //true: String重写过,是比值
System.out.println("+++++++++++++++++++++++++");
String s11 = "abc";
String s12 = "abc";
String s13 = new String("abc");
System.out.println(s11==s12); //true
System.out.println(s11.equals(s12)); //true
System.out.println(s11==s13); //false: 比地址
System.out.println(s11.equals(s13)); //true: 比值