JAVA中==与equals方法的比较
在JAVA中,双等号(==)和equals()方法应用于两个字符串比较时,所比较的内容是有差别的。==比较的是两个字符串对象在内存中的地址,就是判断是否是同一个字符串对象,而equals()方法比较的是两个字符串对象的值。
在字符串类型对象创建的时候,当使用
String str1="hello" 时
字符串默认存储在栈的缓冲池中,假设地址为0X01
String str2="hello"时,
str2会到缓冲池中去找是否有“hello"这个词,如果有这个词,就会把"hello"这个词的地址(即0x01)直接赋给str2,所以str1和str2的地址是一样的。这时
str1==str2的返回值为true.
如果:
String str3=new String ("hello");
String str4=new String ("hello");
用这种带new的创建方式,默认存储在堆中,并开辟空间赋值, 每new一个对象便开辟一个新的空间,故str3和str4的地址不同,所以
str3==str4的返回值为true.
那么,
str1==str2的结果呢?
一个存储在栈的缓冲池的,一个存储在堆中,所以是不同的两个地址,当然返回值为false。
综上:两个非new的返回true,两个new的返回false,一个new 一个非new返回false。