JAVA中字符串对象的地址
我有一个关于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
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()
不是对象的地址。的可能重复项