将为此处显示的代码创建多少个对象?

时间:2014-12-10 04:45:23

标签: java string

将为下面显示的代码创建多少个对象?

String str1 = new String("nitesh");
String str2 = new String("nitesh");
String str3 = "nitesh";
String str4 = str3;
String str5 = str2;

5 个答案:

答案 0 :(得分:4)

  String str1 = new String("nitesh");
  String str2 = new String("nitesh");
  String str3 = "nitesh";
  String str4 = str3;
  String str5 = str2;

  TreeSet<Integer> set = new TreeSet<Integer>();

  set.add(System.identityHashCode(str1));
  set.add(System.identityHashCode(str2));
  set.add(System.identityHashCode(str3));
  set.add(System.identityHashCode(str4));
  set.add(System.identityHashCode(str5));

  System.out.println(set.size());

  // => 3

这三个对象是:

  • "nitesh"在编译期间创建
  • String构造函数创建的两个不同对象。

答案 1 :(得分:0)

3个对象(错误答案)。 &#34;嗯,正确的数字,但错误的解释&#34;。

String str1 = new String("nitesh"); // Creates a new String object
String str2 = new String("nitesh"); // Creates a new String object
String str3 = "nitesh";             // Creates a new String object
String str4 = str3;                 // Holds the same reference as str3
String str5 = str2;                 // Holds the same reference as str2

好像第三行没有创建一个新的String对象,我的不好 我将在此期间在IDE中试用它。

现在暂时保留答案,为了下面的建设性意见。

似乎对3个物体的正确解释将是......

  

第一行创建了2个对象,堆上有1个,String中有1个   池?
第二行在堆上创建一个对象。

答案 2 :(得分:-2)

是3将创建对象。

1)String str1 = new String(“nitesh”); //创建字符串对象“str1”

2)String str2 = new String(“nitesh”); //创建字符串对象“str2”

3)String str3 =“nitesh”; //字符串对象“str3”已创建

String str4 = str3; //不会创建新对象;但是会保留“str3”的价值

String str5 = str2; //不会创建新对象;但是会保留“str2”的价值

答案 3 :(得分:-2)

实际上是2个物体。 str1str2持有对象引用。虽然str3str4str5不包含字符串对象,但却是字符串文字。

在您的示例中,str1str2指向Java String Pool中的不同对象。这些字符串如果发生变异,仍然会指向相同的内存位置,它们在变异之前就会指向它们 虽然这些字符串对象不能直接使用=运算符进行变异,但java中的字符串是不可变,但是stringbuffer对象可以使用字符串对象进行,然后该字符串缓冲区对象可以是借助java.lang.StringBuffer类中的方法进行变异。

但如果str3str4和/或str5发生变异,即。如果您稍后在代码中执行此操作:

str3="narendra modi";

新的记忆位置将保留在java heap而不是java string pool,字符串为&#34; narendra modi&#34;存储在其中,str3将指向它。虽然str4str5仍将指向字符串&#34; nitesh&#34;被储存了。

引用添加:字符串缓冲区可以突变...

https://icl.googleusercontent.com/?lite_url=https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html&ei=25w3utEc&lc=en-IN

答案 4 :(得分:-3)

    String str1=new String("nitesh");
    String str2=new String("nitesh");
    String str3="nitesh";
    String str4=str3;
    String str5=str2;

    System.out.println(str1.hashCode());
    System.out.println(str2.hashCode());
    System.out.println(str3.hashCode());
    System.out.println(str4.hashCode());
    System.out.println(str5.hashCode());

 if (str1 == str2)
        System.out.println("str1 == str2");

    if (str2== str3)
        System.out.println("str2 == str3");

    if (str3== str4)
        System.out.println("str3 == str4");

    if (str4== str5)
        System.out.println("str4 == str5");

== test建议str3 == str4,因此应该为str1,str 2和str3创建3个对象