JAVA中字符串对象的地址

JAVA中字符串对象的地址,java,Java,我有一个关于JAVA中对象地址的问题 下面是我的代码 public class StringCompare { public static void main(String[] args) { String s1 = "apple"; String s2 = "apple"; String s3 = new String("apple"); boolean b1 = (s1 == s2); boolean

我有一个关于JAVA中对象地址的问题

下面是我的代码

public class StringCompare {

    public static void main(String[] args) {
        String s1 = "apple";
        String s2 = "apple";
        String s3 = new String("apple");

        boolean b1 = (s1 == s2);
        boolean b2 = (s1 == s3);
        boolean b3 = s1.equals(s2);

        System.out.println(b1); // true
        System.out.println(b2); // false
        System.out.println(b3); // true

        System.out.println("");

        System.out.println("Address of s1 = " + Integer.toHexString(s1.hashCode()));    // 58b835a 
        System.out.println("Address of s2 = " + Integer.toHexString(s2.hashCode()));    // 58b835a
        System.out.println("Address of s3 = " + Integer.toHexString(s3.hashCode()));    // 58b835a
    }
}
我认为对象(s1和s2)的地址是相同的
我认为对象(s3)的地址不等于s1,s2

但是。。 结果是对象(s1、s2、s3)的地址相同

我不知道为什么s1,s2,s3的地址是一样的

请给我一些建议

谢谢。

您无法获取
字符串的地址。of
对象
返回类似于地址的内容,但
字符串
覆盖。最后,您可以使用
==
测试引用相等性,但是(您似乎知道),您可以使用
.equals()
进行相等性测试。

.hashcode()
不返回地址,它返回Java中每个类隐式提供的哈希值。有关更多信息,请参见以下文档:

如果根据equals(Object)方法两个对象相等,那么对两个对象中的每一个调用hashCode方法必须产生相同的整数结果

由于
String
重写了
equals()
,因此它也重写了
hashCode()
,以履行本合同。这意味着两个不同的对象
equals()
仍将具有相同的hashcode。注意,这意味着hashcode不是对象的地址。(尽管如此,
Object.hashCode()
中的默认实现返回对象本身的唯一标识符,该标识符与其地址有些类似。请注意,这满足
equals()
约定,因为默认实现仅在比较对同一对象的两个引用时返回true。)

hashCode()
不是对象的地址。的可能重复项