首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java中字符串的equals和“==”运算有关问题

2012-05-01 
java中字符串的equals和“”运算问题源代码如下:public class Fin {public static void main(String[] arg

java中字符串的equals和“==”运算问题
源代码如下:
public class Fin {
public static void main(String[] args) {
String s1="abc"+"def";
String s2=new String(s1);
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
}
}
输出:
-1424385949
-1424385949

s1.equals(s2)为true 
s1==s2为false

谁知道原因啊?


[解决办法]
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
[解决办法]
s1.equals(s2),equals的意思就像是说:s1和s2是不是长得像(比较内容),当然一样啊,true

== 意思是s1和s2是不是同一个人,(比较存储的地址) 当然不一样啦false
[解决办法]
楼主:请注意Object类的hashcode方法是根据对象在内存中的地址返回的。

而String类改写了这个方法。你可以看下String类的源码:

Java code
    public int hashCode() {    int h = hash;        int len = count;    if (h == 0 && len > 0) {        int off = offset;        char val[] = value;            for (int i = 0; i < len; i++) {                h = 31*h + val[off++];            }            hash = h;        }        return h;    } 

热点排行