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是比较两个对象的内容是否相等!!!
------解决方案--------------------