由數組比較引出的“等于”問題
来源:互联网 发布:js数组排序方法速度 编辑:程序博客网 时间:2024/06/01 23:22
在java中用于相等的比較運算符有“==”,“equals”。 但是它們的應用對象卻是不一樣的。下面來列舉一下它們的異同。
- “==”用于比較基本數據類型的數值是否相等,而它應用于對象的比較是主要比較兩個對象的名稱是否參考至同一對象,而不是比較其內容。
- “equals”是Object超類的一個方法,是比較兩個對象的內存地址是否相同,在java中的表現就是hashCode,如果一個對象改變了,那么它的hashCode也將改變。
問題也是由第二條引出來的,一開始我的理解equals可以用于對象的比較,那么請看下面的代碼
int[] arr1 = new int[2] ...{1, 2};
int[] arr2 = new int[2] ...{1, 2};
int[] tmp = arr1;
System.out.println( arr1.equals(arr2)); // false
System.out.println(Arrays.equals(arr1,arr2)); // true
System.out.println(arr1.equals(tmp)); // true
System.out.println("arr1's hashCode " + arr1.hashCode + " tmp's hashCode" + tmp.hasCode +" arr2's hashCode: " + arr2.hashCode); //看看這幾個對象的hashCode
int[] arr2 = new int[2] ...{1, 2};
int[] tmp = arr1;
System.out.println( arr1.equals(arr2)); // false
System.out.println(Arrays.equals(arr1,arr2)); // true
System.out.println(arr1.equals(tmp)); // true
System.out.println("arr1's hashCode " + arr1.hashCode + " tmp's hashCode" + tmp.hasCode +" arr2's hashCode: " + arr2.hashCode); //看看這幾個對象的hashCode
數組也是對象,但是要是比較數組的內容是否相等并不能用arr1.equals(arr2),數組中的equals是重寫的。
在官方的docs中,寫到Object的equals相等是引用了“”符號,表明并不是真正的兩個對象的相等比較。在使用equals,“==”時要搞定出這些,避免出現不必要的錯誤。
- 由數組比較引出的“等于”問題
- 由wchar_t 引出的
- 由继承引出的
- 由一段聊天记录引出的
- 由strlen引出的一些
- 由-128的补码引出的思考
- 由游戏引出的镜子理论
- 由vc2005 编译错误引出来的
- 由独生子女证引出的一系列问题
- 由显示/隐藏引出的CSSBug
- 由排序算法引出的数据结构
- 由boost::timer_traits引出的部分测试
- 由Struct 嵌套定义引出的问题
- 由OpenSessionInView引出的List复制问题
- 由HTTP500错误引出的问题案例
- 由 argv引出的main参数
- 由一道题目引出的java多态
- 由火车进站引出的问题
- ASP部份常用函数
- IBM:Peggy:SOA重在把业务变成组件和流程化模块
- 美科利推出面向服务架构(SOA)的业务优化科技
- Sun Java System Application Server 9 & DB2,Hiberante3,SUSE Linux Server9
- ASP调用.net webservice
- 由數組比較引出的“等于”問題
- 招聘乐事
- Calculator.NET 2.3发布
- Javascript:检测FlashPlayer版本的函数
- 关于VS2005中的Code Snippets Manager的问题及解决
- aspnetdb.mdf数据字典
- [翻译]脚本引擎实现 - 第四部分 符号表和文法树
- [winform入门级好书]c# Windows Forms程序设计
- 关于asp.net Session丢失问题的总结