【问题标题】:How many string objects are getting created for this program?为这个程序创建了多少个字符串对象?
【发布时间】:2017-11-12 15:25:59
【问题描述】:

我得到这两个对象的相同哈希码。

案例 1

String s=new String("ll");
String s1=new String(s);

但是对于案例 2,我得到了不同的哈希码

案例 2

String s=new String("ll");
String s1=new String("ll");

那么如果情况 1 是创建两个不同的对象还是只创建一个?

【问题讨论】:

  • 案例2应该有两个不同的哈希码。你一定是搞错了。
  • String 是 java 中一个特殊的不可变类,请阅读:docs.oracle.com/javase/8/docs/api/java/lang/String.html 应该清除它。如果你真的想看看它发生了什么,调试 yoru 代码并查看附加到每个对象的实例 id。

标签: java string


【解决方案1】:

'new' 关键字总是创建一个新对象。 因此,在情况 1 和 2 中,引用 s 和 s1 表示单独的对象。

鉴于哈希码是基于值的,在这两种情况下,都会为 s 和 s1 生成相同的哈希码。

代码如下:

  // CASE 1
  String s=new String("ll");
  String s1=new String(s);
  System.out.println(s.hashCode());       //prints 3456
  System.out.println(s1.hashCode());      //prints 3456

  // CASE 2
  String ss=new String("ll");
  String ss1=new String("ll");
  System.out.println(ss.hashCode());       //prints 3456
  System.out.println(ss1.hashCode());      //also prints 3456

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2014-08-01
    • 1970-01-01
    • 2019-09-19
    • 2021-07-04
    相关资源
    最近更新 更多