Bog*_* M. 3 java string instantiation
我正在阅读有关java最佳实践的一些建议,我得到了以下想法让我很好奇
此外,无论何时想要实例化String对象,都不要使用其构造函数,而是始终直接实例化它.
例如:
//slow instantiation
String slow = new String("Yet another string object");
//fast instantiation
String fast = "Yet another string object";
Run Code Online (Sandbox Code Playgroud)
为什么是这样?不是'fast'调用默认的字符串构造函数?
当你使用时,new你得到一个新的字符串对象,但是如果你使用字符串文字,那么请看这里:
在计算机科学中,字符串实习是一种只存储每个不同字符串值的一个副本的方法,该字符串值必须是不可变的.实习字符串使得一些字符串处理任务更加节省时间或空间,代价是在创建或实现字符串时需要更多时间.不同的值存储在字符串实习池中.每个字符串的单个副本称为"实习生",通常由字符串类的方法查找,例如Java中的String.intern().Java中的所有编译时常量字符串都使用此方法自动实现.
如果你这样做:
String a = "foo";
String b = "foo";
Run Code Online (Sandbox Code Playgroud)
那a==b是真的!
只有在尚未实现的情况下才会创建字符串.将在第一次创建对象,并将其存储在称为String常量池的位置.
但是使用new将为每个字符串创建不同对象,将输出false.
String a = new String("foo");
String b = new String("foo");
Run Code Online (Sandbox Code Playgroud)
现在a==b是假的.
因此,在使用文字时,它更容易阅读,并且编译器更容易进行优化.所以..尽可能使用它.
| 归档时间: |
|
| 查看次数: |
11471 次 |
| 最近记录: |