1.“==”:对于int,double,boolean等原始数据类型,“==”比较的是双方的值是否相同;对于类对象,“==”比较的双方的内存地址是否相等。
2.equals():用于类对象的比较,具有自反,对称与传递性。Object基类中比较的是内存地址,而在一些类库中,equals()方法已被重写,如Integer,String等。对于自定义的类,如果涉及到对象的比较,可能需要重写equals()方法。请注意,通常在重写hashCode方法时重写该方法,以便维护hashCode方法的一般契约,该契约规定相等的对象必须具有相等的哈希码。
3.hashcode():返回的是对象的哈希码,在使用哈希表等数据结构时会用到,便于对象的查找。请注意,通常在重写equals方法时重写该方法,以便维护equals方法的一般契约,该契约规定相等的对象必须具有相等的哈希码。
String s1 = "hello";
String s2 = "hello";
System.out.println(s1==s2);//"hello"保存在常量池中,两个变量指向同一个内存地址,返回true
System.out.println(s1.equals(s2));//true
String a1 = new String("abc");
String a2 = new String("abc");
System.out.println(a1==a2);//虽然内容一样,但是两次new的地址不一样,返回false
System.out.println(a1.equals(a2));//true