初始化字符串与new和“”之间的区别

时间:2013-10-17 05:33:26

标签: java string

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

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

Or

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

请说明以上2个字符串初始化有什么不同。

8 个答案:

答案 0 :(得分:4)

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使用追加方法。

答案 1 :(得分:1)

简短回答:

String str = new String();

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

str = "Hello, String Pool";

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

但是 String str =“qwerty”意味着你将它分配给str。由于机器人存储在公共池中。所以最好使用这种表示法。

答案 4 :(得分: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 + "'";

答案 5 :(得分:0)

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

创建一个空字符串的绑定,然后通过重新初始化它来完全转储它。

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

创建绑定并离开它。

第一个是不必要的。请使用直接字符串文字。

答案 6 :(得分:0)

你可以这样使用。

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

String dynamic = stringBuilder.toString();

答案 7 :(得分: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)的行中完成,则无法全局执行。如果变量的范围不是问题,那么你可以继续。干杯!!