我是Java的新手,并且有一个与字符串创建相关的问题。
案例1:
String a = "hello";
String b = "world";
a = a + b;
System.out.println(a);
案例2:
String a;
String a = "hello";
a = new String("world");
System.out.println(a);
我想知道在每种情况下创建了多少个对象。因为String是不可变的,所以一旦赋值给它就不能重用该对象(这就是我目前所理解的,如果我错了,请纠正我。)
如果有人能用StringBuffer解释相同的话,我会更高兴。感谢。
答案 0 :(得分:1)
Case 1:
String a = "hello"; -- Creates new String Object 'hello' and a reference to that obj
String b = "world"; -- Creates new String Object 'world' and b reference to that obj
a = a + b; -- Creates new String Object 'helloworld' and a reference to that obj.Object "hello" is eligible for garbage collection at this point
So in total 3 String objects got created.
Case 2:
String a; -- No string object is created. A String reference is created.
String a = "hello"; -- A String object "hello" is created and a reference to that
a = new String("world"); -- A String object "world" is created and a reference to that. Object "hello" is eligible for garbage collection at this point
So in total 2 String objects got created
答案 1 :(得分:0)
如果您正确地提到字符串为immutable
,则下面会创建3 string literal objects
String a = "hello"; --first
String b = "world"; --second
a = a + b; --third (the first is now no longer referenced and would be garbage collectioned by JVM)
在第二种情况下,仅创建2 string objects
String a;
String a = "hello";
a = new String("world");
首先使用了StringBuffer而不是String,比如
StringBuffer a = new StringBuffer("hello"); --first
String b = "world"; --second
a.append(b); --append to the a
a.append("something more"); --re-append to the a (after creating a temporary string)
上面只会创建3 objects
,因为字符串在内部连接到同一个对象,而使用StringBuffer
答案 2 :(得分:0)
在案例1中,创建了3个对象,“hello”,“world”和“helloworld”
在案例2中,在字符串池“hello”和“world”中创建了两个对象。即使字符串池中存在“World”对象,也会创建new对象。