1

哪一个是正确的,为什么:

String dynamic = new String();
dynamic = " where id='" + unitId + "'";

Or

String dynamic = " where id='" + unitId + "'";

请提出上述2个String initilizaton的区别。

4

8 回答 8

5
String dynamic = new String();   //created an String object
dynamic = " where id='" + unitId + "'"; //overriding reference with new value

由于字符串是不可变的,现在dynamic 将存储在公共池中。

String dynamic = " where id='" + unitId + "'";

再次是文字并存储在公共池中。

因此,String可以通过直接分配在公共池中String共享的文字来创建。

在堆中构造对象是不常见的,也不推荐使用new操作符。String

所以这条线

String dynamic = new String();

是多余的并且在堆中分配了不必要的内存。

不要那样做。

了解这两种情况会发生什么,然后你就会知道。

最后,不要在“+”中使用太多的连接,在较少的连接中不会造成太大的伤害。如果您正在处理大量更喜欢使用StringBuilder附加方法

于 2013-10-17T05:52:06.490 回答
2

简短的回答:

String str = new String();

在堆上创建一个新的 String 对象。当你之后做:

str = "Hello, String Pool";

您只需用另一个引用覆盖对第一个对象的引用。因此,第一个对象丢失了。请记住这一点:字符串是不可变的

于 2013-10-17T05:39:35.020 回答
1

字符串 str = new String(); // 因为有 new 操作符所以你正在创建一个字符串对象。这将在内存中创建额外的空间。所以浪费内存和冗余。在你没有创建一些复杂的对象之前不建议使用它。

但是String str ="qwerty"意味着你将它分配给 str。由于机器人存储在公共池中。所以最好使用这个符号。

于 2014-09-09T09:00:46.067 回答
1

我们知道 String 类是不可变的,所以 String str="Hello String"; 是使用 String 类的最佳方式,这样我们就可以避免内存浪费。当创建具有相同值的字符串时。

于 2013-10-17T12:01:13.023 回答
0

我建议你这样做

String dynamic = " where id='" + unitId + "'";

String dynamic  = new String();// DON'T DO THIS!
dynamic = " where id='" + unitId + "'";

该语句每次执行时都会创建一个新的 String 实例,并且不需要创建这些对象。String 构造函数的参数 (" where id='" + unitId + "'") 本身就是一个 String 实例,在功能上与构造函数创建的所有对象相同。如果这种用法发生在循环中或频繁调用的方法中,则可能会不必要地创建数百万个 String 实例。改进后的版本如下:

String dynamic = " where id='" + unitId + "'";
于 2013-10-17T05:34:29.140 回答
0

你可以这样使用。

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("where id='");
stringBuilder.append(unitId);
stringBuilder.append("'");

String dynamic = stringBuilder.toString();
于 2013-10-17T05:39:10.630 回答
0
String dynamic = new String();
dynamic = " where id='" + unitId + "'";

创建到空字符串的绑定,然后通过重新初始化将其完全转储。

String dynamic = " where id='" + unitId + "'";

创建绑定并离开它。

第一个是不必要的。只需使用直接字符串文字即可。

于 2013-10-17T05:35:37.127 回答
0

我想下面会很好

String str; // Just declares the variable and the default will be null. This can be done in global scope or outer scope

str = "where id" + unitID + "'"; // Initializing string with value when needed. This will be done in the inner scope.

如果声明和初始化在初始化包含动态文本(在您的情况下为 unitID)的行中完成,则无法全局执行。如果变量的范围不是问题,那么你可以继续。干杯!!

于 2013-10-17T05:47:24.240 回答