将为下面显示的代码创建多少个对象?
String str1 = new String("nitesh");
String str2 = new String("nitesh");
String str3 = "nitesh";
String str4 = str3;
String str5 = str2;
答案 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个物体。 str1
和str2
持有对象引用。虽然str3
,str4
和str5
不包含字符串对象,但却是字符串文字。
在您的示例中,str1
和str2
指向Java String Pool
中的不同对象。这些字符串如果发生变异,仍然会指向相同的内存位置,它们在变异之前就会指向它们
虽然这些字符串对象不能直接使用=
运算符进行变异,但java中的字符串是不可变,但是stringbuffer对象可以使用字符串对象进行,然后该字符串缓冲区对象可以是借助java.lang.StringBuffer
类中的方法进行变异。
但如果str3
,str4
和/或str5
发生变异,即。如果您稍后在代码中执行此操作:
str3="narendra modi";
新的记忆位置将保留在java heap
而不是java string pool
,字符串为&#34; narendra modi&#34;存储在其中,str3
将指向它。虽然str4
和str5
仍将指向字符串&#34; nitesh&#34;被储存了。
引用添加:字符串缓冲区可以突变...
答案 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个对象