java字符串来证明相等

时间:2014-03-02 16:36:24

标签: java string hashcode

class Foo{}
class Boo{}
class MyString
{
 public static void main (String[] args) throws java.lang.Exception
 {
     String s1="Hello";
     String s2="Hello";
     String s3=new String("Hello");
     System.out.println(s1.hashCode()+" "+(s1==s2));
     System.out.println(s2.hashCode());
     System.out.println(s3.hashCode()+" "+(s2==s3));
     System.out.println(new Boo().hashCode());
     System.out.println(new Foo().hashCode());
 }
}

上述代码的输出为
69609650 true 69609650 69609650 false 17351095 9318325

由于文字池s1和s2引用相同的对象,因此s1==s2给出了真实。 s3是使用 new 关键字创建的String对象。所以s2==s3给出false。 我尝试使用hashCode() 来证明s2和s3位于不同的位置 然后我开始知道不同的对象不需要有不同的hashCodes并且字符串内容用于产生hashCode

所以我的问题是 如何证明s2和s3在不同的内存位置? (除非使用==)是否有任何内置方法来检查内存位置?
如果通过使用其内容为字符串计算hashCode值,那么new Foo().hashCode()的工作方式是什么?

1 个答案:

答案 0 :(得分:0)

  

它如何用于新的Foo()。hashCode()

首先,您需要了解hashCode()类已实现Object方法。 并且String类刚刚重写了此方法,以提供一种以不同方式计算字符串对象的hashCode的机制。

因此,new Foo().hashCode()使用Object类提供的defualt hashCode()实现。由于Foo类没有通过覆盖它来提供自己的hashCode()实现。

Object类提供的默认hashCode()(本机方法)只是使用object的内存引用来计算hashcode值。