Java字符串声明

Jav*_*ser 23 java string

是什么区别String str = new String("SOME")String str="SOME" 是否这些声明给人的性能变化.

Pet*_*Mmm 43

String str = new String("SOME")
Run Code Online (Sandbox Code Playgroud)

总是在堆上创建一个新对象

String str="SOME" 
Run Code Online (Sandbox Code Playgroud)

使用字符串池

试试这个小例子:

        String s1 = new String("hello");
        String s2 = "hello";
        String s3 = "hello";

        System.err.println(s1 == s2);
        System.err.println(s2 == s3);
Run Code Online (Sandbox Code Playgroud)

为避免在堆上创建不必要的对象,请使用第二种形式.


Rid*_*del 9

两者之间存在细微差别.

第二个声明将与常量关联的引用分配SOME给变量str

第一个声明创建一个新的String,其值为常量的值,SOME并指定其对变量的引用str.

在第一种情况下,创建了第二个String,SOME其具有相同的值,这意味着更多的初始化时间.因此,你应该避免它.此外,在编译时,所有常量SOME都转换为相同的实例,使用的内存要少得多.

因此,总是喜欢第二种语法.

  • 对于记录,有些情况下`new String(String)`是有意义的,就像你有一个非常大的字符串并且你只想保留一个小的子字符串.`substring`方法只返回原始字符串的flyweight视图,因此使用`new String(hugeString.substring(a,b))`强制复制并让GC回收`hugeString`的内容.范围.他们不应该把它变成一个构造函数,不过...... (3认同)