Java:可以访问从字符串连接创建的临时对象吗?

时间:2012-09-26 07:09:54

标签: java string object concatenation temporary

在Java中创建String对象时,然后通过

连接其他内容
someString.concat("I am being concatenated to someString");

或者其中一些,因为字符串是不可变的,所以创建了一个包含结果字符串的临时对象,对吗? 通常,完成此操作后,会立即创建一个新的String对象以包含它,类似于

String newString = oldString.concat("I am being concatenated");

但是假设事实并非如此。在这种情况下,是否有另一种方法来访问连接字符串? (在最后一种情况下,oldString和“我正在连接”的总和。)

4 个答案:

答案 0 :(得分:3)

我会说不,因为你在堆空间中创建了一个新对象但没有引用它。所以它将被垃圾收集。在Java中,没有办法直接访问堆空间地址......

答案 1 :(得分:2)

concat确实创建了一个新的String对象(不确定临时意味着什么),如果你没有将新String的引用存储在一个变量中以后你无法访问它。

在实践中:

someString.concat("I am being concatenated to someString");
在某些阶段(如果代码由JIT编译器编译),

可能会被删除为死代码。

答案 2 :(得分:1)

请参阅已接受的答案以获得正确的答案,但可能是一个疯狂的回复......

someString.concat("I am being concatenated to someString").intern();
// later on later on in the code...
String s = new String("I am being concatenated to someString").intern();

答案 3 :(得分:0)

Java中非基本类型的变量是引用,它们本身不是对象(如在C ++中)。在这样的一行:

String newString = oldString.concat("I am being concatenated");

创建了新的String对象,其中复制了想象的临时字符串的内容。事实上,newString将引用您认为的临时对象。 (没有真正的临时对象)。