哪一个是正确的,为什么:
String dynamic = new String();
dynamic = " where id='" + unitId + "'";
Or
String dynamic = " where id='" + unitId + "'";
请提出上述2个String initilizaton的区别。
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
附加方法。
简短的回答:
String str = new String();
在堆上创建一个新的 String 对象。当你之后做:
str = "Hello, String Pool";
您只需用另一个引用覆盖对第一个对象的引用。因此,第一个对象丢失了。请记住这一点:字符串是不可变的。
字符串 str = new String(); // 因为有 new 操作符所以你正在创建一个字符串对象。这将在内存中创建额外的空间。所以浪费内存和冗余。在你没有创建一些复杂的对象之前不建议使用它。
但是String str ="qwerty"意味着你将它分配给 str。由于机器人存储在公共池中。所以最好使用这个符号。
我们知道 String 类是不可变的,所以
String str="Hello String";
是使用 String 类的最佳方式,这样我们就可以避免内存浪费。当创建具有相同值的字符串时。
我建议你这样做
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 + "'";
你可以这样使用。
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("where id='");
stringBuilder.append(unitId);
stringBuilder.append("'");
String dynamic = stringBuilder.toString();
String dynamic = new String();
dynamic = " where id='" + unitId + "'";
创建到空字符串的绑定,然后通过重新初始化将其完全转储。
String dynamic = " where id='" + unitId + "'";
创建绑定并离开它。
第一个是不必要的。只需使用直接字符串文字即可。
我想下面会很好
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)的行中完成,则无法全局执行。如果变量的范围不是问题,那么你可以继续。干杯!!