String中的"=="和"equals(Object obj)"方法的比较
equals是判断两个变量或者实例指向同一个内存空间的值是不是相同
而==是判断两个变量或者实例是不是指向同一个内存空间
public static void main(String[] args) {
String s0="abc";
String s1="abc";
String s2=new String("abcd");
String s3=new String("abcd");
//判断== 判断二者是否相等,相等则返回true,否则返回false
System.out.println(s0==s1);//true 都引用了常量池的相同值
System.out.println(s2==s3);//false 创建了两个不同的对象
//判断equals 首先判断二者是否“==”,如果二者相等,则返回true;
//其次,调用相关的hashCode()方法判断二者生成的hashCode码
//是否相等,相等则返回true;如果上述两种情况都不成立,则返回false
System.out.println(s0.equals(s1));//true 引用常量池相同值
System.out.println(s2.equals(s3));//true 首先判断==,
//不通过则判断hashCode码,由于hashCode码相同,所以结果为ture
System.out.println(s2.hashCode());//2987074
System.out.println(s3.hashCode());//2987074
}
注解:如果根据equals方法,两个对象是相等的,那么对这两个对象中
的每个对象调用hashCode方法都必须生成相同的整数结果;如果根据equals
方法,两个对象不相等,那么对这两个对象中的任一对象上调用hashCode方法
不要求一定生成不同的整数结果(但是,为不相等的对象生成不同的整数结果
可以提高哈希表的性能)。
注:文章全部内容是作者的学习经验总结,如果有不完美的地方,还请联系编者修改,亦或是你的疑惑编者在此处并未涉及到,也可以联系编者进行解答,完善。在此也欢迎更多的你加入我们。
加入我们,或是帮助我们改进,请扫: