String s1="hello";
String s2=s1.substring(2,3);
String s3=s1.toString();
String s4=new StringBuffer(s1).toString();
System.out.println("s1:"+s1.hashCode());
System.out.println("s2:"+s2.hashCode());
System.out.println("s3:"+s3.hashCode());
System.out.println("s4:"+s4.hashCode());
if(s1==s3 && s1==s4){
System.out.println("111111111111");
}else{
System.out.println("22222222222");
}
为什么输出是22222222222

解决方案 »

  1.   

    s1==s3没问题,s1!=s4的呀。。s4是stringBuffer.toString()的 肯定不一样哦
      

  2.   

    为什么吗?hashCode不是一样的嘛?
      

  3.   

    String s1="123";
    String s2=new String("123");
    你对比下,在看下s1和s2的hashcode
      

  4.   

    s1.equals(s2) true,但s1==s2 false.  他们相等,但是两个对象。
      

  5.   


    如果两个对象相等,他们的hashcode肯定一样。但是如果hashcode一样,这两个对象不一定相等。
      

  6.   

    if (s1.equals(s3) && s2.equals(s4))
      

  7.   

    “==”比较的是对象的引用,所以S1!=S4,而且在String类已经重写的hashcode()方法,此时的hashcode()比较的是字符串的哈希值,不再是比较对象的引用的哈希值,因为object类默认的是比较对象的引用的hashcode()
    我的理解  呵呵