【喵"的Android之路】【番外篇】关于==和equals

时间:2014-07-13 17:39:35   收藏:0   阅读:360
【喵"的Android之路】【番外篇】关于==和equals
 
在实际的编程当中,经常会使用==和equals来判断变量是否相同。但是这两种比较方式也常常让人搞得云里雾里摸不着头脑。下面是我个人做的总结,希望能起到拨云见日的作用。
 
【讲前普及】
请阅读
【喵"的Android之路】【基础篇(一)】【Java面向对象基础】数据类型与运算符
了解Java基本数据类型和引用数据类型
 

1、"=="运算符

通俗点讲,==运算符比较的是两个变量在栈中的内容是否相同。
以a == b为例:

1.1 如果a,b都是基本数据类型

//Code:
int a = 1000;
int b = 1000;
 
//Result:
a == b : true

 

1.2 如果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均为引用类型

 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方法

除去自定义的equals方法,和一些类对equals方法的特殊实现,一般情况下,equals比较的就是两个对象的实质内容是否相同。
还以b.equals(a)为例:

2.1 如果a、b都是基本数据类型,不可比较

2.2 如果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均为引用类型

1 //Code:
2 Object a = new String("Test");
3 Object b = new StringBuilder("Test");
4 
5 //Result:
6 b.equals(a):false
//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

【喵"的Android之路】【番外篇】关于==和equals,布布扣,bubuko.com

原文:http://www.cnblogs.com/monodin/p/3841219.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!