【喵"的Android之路】【番外篇】关于==和equals
1、"=="运算符
1.1 如果a,b都是基本数据类型
- a,b不兼容,无法比较
- a,b兼容,比较栈内的数值
//Code: int a = 1000; int b = 1000; //Result: a == b : true
1.2 如果a为基本数据类型,b为引用类型
- a,b不兼容,无法比较
- a,b兼容,则比较的仍然是a、b在栈内的内容
1 //Code: 2 int a = 1000; 3 Integer b = 1000; 4 Integer c = new Integer(1000); 5 6 //Result: 7 a == b:true 8 a == c:true
1.3 如果a、b均为引用类型
- a、b不兼容,无法比较
- a、b兼容,则比较的是对象a、b在栈内保存的地址(不考虑null情况)
1 // 简单说,就是比较a、b是否指向的是同一个实例(内存块)。 2 Code: 3 String a = "Test"; 4 String b = "Test"; 5 String c = new String("Test"); 6 String d = new String("Test"); 7 8 Integer x = 1000; 9 Integer y = new Integer(1000); 10 Integer z = new Integer(1000); 11 12 Result: 13 a == b:true 14 a == c:false 15 c == d:false 16 17 x == y:false 18 y == z:false 19 // 上例中,"Test"被放在常量池中,对象a、b的地址均指向该常量。c和d则在堆内重新开辟内存分别存储"Test",所以c和d指向的内存地址也不相同。
2、equals方法
2.1 如果a、b都是基本数据类型,不可比较
2.2 如果a为基本数据类型,b为引用类型
- 如果a、b不兼容,则结果必为false
- 如果a、b兼容,则比较a在栈内的数值和b在堆内存中的值是否相同
1 //Code: 2 int a = 1000; 3 Integer b = 1000; 4 Integer c = new Integer(1000); 5 6 //Result: 7 b.equals(a):true 8 c.equals(a):true
2.3 如果a、b均为引用类型
- 如果a、b不是相同实例,则结果必为false
1 //Code: 2 Object a = new String("Test"); 3 Object b = new StringBuilder("Test"); 4 5 //Result: 6 b.equals(a):false
- 如果a、b是相同实例,则比较a、b在堆内存中的值是否相同
//Code: String a = "Test"; String b = "Test"; String c = new String("Test"); String d = new String("Test"); Integer x = 1000; Integer y = new Integer(1000); Integer z = new Integer(1000); //Result: b.equals(a):true c.equals(a):true c.equals(d):true y.equals(x):true y.equals(z):true
本文系Nodin原创,转载请注明出处!http://www.cnblogs.com/monodin/p/3841219.html
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。