为此程序创建了多少个字符串对象?

时间:2017-11-12 15:25:59

标签: java string

我为这两个对象获取相同的哈希码。

案例1

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

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

案例2

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

那么在案例1中是两个不同的对象创建或只有一个?

1 个答案:

答案 0 :(得分:2)

'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