看了一下午的技术论坛,看各位大神==和equals问题解决了不少。
自认也明白了这个问题。可是我又逛了一个帖子,在测试的时候把我搞蒙了。求解答- public class AndTest {
- public static void main(String[] args){
- String a = "b1";
- String b = "b";
- b += 1;
- System.out.println("a_hashCode:"+a.hashCode());//输出结果3087
- System.out.println("b_hashCode:"+b.hashCode());//输出结果3087
- System.out.println("a==b:"+(a==b));
- System.out.println("a.equals(b):"+a.equals(b));
-
- String c="ab";
- String d="ab";
- String e=new String("ab");
- System.out.println("c==d:"+(c==d));//结果为true,毕老师说,是创建c的时候,把ab放入常量池,
- //在创建ab,发现常量池中有,就直接让d指向ab,所以没有new新对象
- System.out.println("c.equals(d):"+c.equals(d));//true,没疑问, String复写了Obejct的equals方法。
- System.out.println("c==e:"+(c==e));//结果为false,是否可以理解为e是重新new的另一个对象,所以不等。但是hashCode相同
- System.out.println("c.equals(e)"+c.equals(e));//和c。equals(d)一样
-
- }
- }
复制代码 代码中,hashCode()值都一样,但a==b却是false,我是否可以理解为,hashCode有点类似密码生成机制的意思,
给你个字符串(拿字符串举例),通过一些加密方式返回密码。
现在这个==和equals真心不明白到底怎么比较的,只知道貌似Object的equals就是==
想HashSet还好说点,知道怎么比,先比hashCode,再比equals。
最近看的一些关于==和equals的问题差不多都一样,好像都是不明白怎么比的,求高手解答! |
|