`
gcq04552015
  • 浏览: 457682 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

== 与 equals的比较

 
阅读更多
public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// str1,str2 在字符串缓冲池中寻找,发现有相等值的abc
// 则把str1的引用赋给了str2,即两个引用都指向abc一个地址(都指向同一块字符串池)
// str3为new 新开辟了一个地址, equals表示值相等(内容相等), == 表示地址相等(比较两个对象是否指向同一引用,也就是地址的比较)
// java.lang 中的类都重写了 equals方法,
// 如果自定义类,要让equals正确必须重写此方法(因为equals默认是比较句柄的-相当于地址)
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1.equals(str2));// true
System.out.println(str1 == str2);// true
System.out.println(str1.equals(str3));// true
System.out.println(str1 == str3);// false
}

/**
* hashcode java规范要求对于同一个对象每次生成的hashcode必须相同!
*/

/**
*
* hashcode这个方法是用来鉴定2个对象是否相等的。
*
* 那你会说,不是还有equals这个方法吗?
*
* 不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。
*
* 一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,
* 就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。
* 举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。
*
* hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,
* 他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。
* 这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,
* hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,
* 比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。举个例子,
*
* 还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,
* 这样从逻辑上,他们就一致了。
*
* 要从物理上判断2个对象是否相等,用==就可以了。
*
*
*/
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics