equals 和==的区别

来源:互联网 发布:收银机什么软件好 编辑:程序博客网 时间:2024/06/08 11:26
引言: 
Java当中所有类都继承自Object这个基类,在Object中的定义了一个equals方法,这个方法的初始化行为是比较对象的内存地址值,但在一些类库中这个方法被覆盖掉了,比如String, Interger, Date这些类中equals有其自己的实现方法,String类继承自Object类,也继承了equals方法,但是重写了该方法,不再比较类在堆内存中的存放地址了,而是比较存在堆中的值。 ???


1):在比较字符串变量时,(java.lang.String)下的equals方法:


String str = “Hello world”; 
String str = new String("Hello world");


“==”比较两个变量本身的值,即两个对象在内存中的首地址。而 
“equals()”则比较字符串中所包含的内容是否相同。 
例如:

String s1 = new String("abc");
String s2 = new String("abc");
s1 == s2  //false 两变量的内存地址不同
s1.equals(s2) //true 两变量包含的的内容相同

注意(1):
 StringBuffer s1 = new StringBuffer("a");
 StringBuffer s2 = new StringBuffer("a"); 
 s1.equals(s2)  //false  
 //因为StringBuffer类中没有重新定义这个方法,因此这个方法就来自Object类,而Object类中的equals方法是用来比较“地址”的,所以等于false.


注意(2):
String s3 = "abc";
String s4 = "abc";
s3 == s4 //true 
//由于s3和s4是两个字符串常量所生成的变量,其中所存放的内存地址是相等的,




2):在比较非字符串变量时: 
“==”和”equals”方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

A a1 = new A(); 
A a2 = new A(); 
a1==a2 //false 
a1.equals(a2) //false


a1 = a2;


a1==a2 //true 
a1.equals(a2) //true 


注意(1): 如果是基本类型比较,那么只能用==来比较,不能用equals


注意(2):如果是基本类型的包装类,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容


总之: 
equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其地址是否相同的。 
== 比较符是比较指向的对象是否相同的也就是对象在对内存中的的首地址。 
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。


    第一次写博客,感觉有点杂乱无序,文章参考自http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html 我是一名快乐的搬运工,我是一名快乐的小码农.
原创粉丝点击