日期:2014-05-20  浏览次数:20672 次

java中的"=="和equals的比较详解
引用---作者:风中叶(张龙)
1.equals()方法,该方法定义在Object 类当中,因此Java 中的每个类都具有该方法,  
  对于Object 类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引  
  用是否一致,即这两个引用是否指向的是同一个对象。对于Object 类的equals()方  
  法来说,它等价于==。  
2. 对于String 类的equals()方法来说,它是判断当前字符串与传进来的字符串的内容  
  是否一致。  
3. 对于String 对象的相等性判断来说,请使用equals()方法,而不要使用==。  
4. String 是常量,其对象一旦创建完毕就无法改变。当使用+拼接字符串时,会生成新  
  的String 对象,而不是向原有的String 对象追加内容。  
5. String Pool (字符串池)  
6. String s = “aaa”; (采用字面值方式赋值)  
1) 查找String Pool 中是否存在“aaa”这个对象,如果不存在,则在String Pool 中创建  
  一个“aaa”对象,然后将String Pool 中的这个“aaa”对象的地址返回来,赋给引  
  用变量s,这样s 会指向String Pool 中的这个“aaa”字符串对象  
2) 如果存在,则不创建任何对象,直接将String Pool 中的这个“aaa”对象地址返回来,  
  赋给s 引用。  
7. String s = new String(“aaa”);  
1) 首先在String Pool 中查找有没有“aaa”这个字符串对象,如果有,则不在String Pool  
  中再去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对  
  象,然后将堆中的这个“aaa”对象的地址返回来,赋给s 引用,导致s 指向了堆中  
  创建的这个“aaa”字符串对象。  
2) 如果没有,则首先在String Pool 中创建一个“aaa “对象,然后再在堆中(heap)创  
  建一个”aaa “对象,然后将堆中的这个”aaa “对象的地址返回来,赋给s 引用,  
  导致s 指向了堆中所创建的这个”aaa “对象。
public class ObjectTest
{
public static void main(String[] args)
{
Object object = new Object();
Object object2 = new Object();
System.out.println(object == object2);

System.out.println("--------------------");

String str = new String("aaa");
String str2 = new String("aaa");
System.out.println(str == str2);

System.out.println("--------------------");

String str3 = "bbb";
String str4 = "bbb";
System.out.println(str3 == str4);

System.out.println("--------------------");

String str5 = new String("ccc");
String str6 = "ccc";

System.out.println(str5 == str6);

System.out.println("--------------------");

String s = "hello";
String s1 = "hel";
String s2 = "lo";
System.out.println(s == s1 + s2);

System.out.println("--------------------");

System.out.println(s == "hel" + "lo");


}
}


------解决方案--------------------
==是比较两个对象的地址是否相等。
equals是比较两个对象的内容是否相等(当能得重写equals()方法,才能够适用,不写的话和 == 一样)。
------解决方案--------------------
equals是Object的方法,缺省是用==比较的,也就是说Object的equals的内部代码直接返回==的结果
而每个继承Object的类都可以重写equals方法
==是比较两个引用变量的内存的值equals可以根据需要重写该方法,一般来说,equals比较两个引用变量所引用的对象的某些属性值是否一样
------解决方案--------------------
你这个不该发帖啊,应该写博客的。
------解决方案--------------------
http://blog.csdn.net/iterzebra/article/details/6757681
------解决方案--------------------
讲的很有道理,很好地区分了“==”和“equal”!
------解决方案--------------------
==是比较两个对象的地址是否相等。
equals是比较两个对象的内容是否相等!!!
------解决方案--------------------
探讨
==是比较两个对象的地址是否相等。
equals是比较两个对象的内容是否相等!!!