Java字符串声明
String str = new String("SOME")
和String str="SOME"
之间的区别这些声明是否提供性能变化。
String str = new String("SOME")
总是在堆上创建一个新对象
String str="SOME"
使用String池
试试这个小例子:
String s1 = new String("hello"); String s2 = "hello"; String s3 = "hello"; System.err.println(s1 == s2); System.err.println(s2 == s3);
为避免在堆上创建不必要的对象,请使用第二种forms。
两者之间存在细微差别。
第二个声明将与常量SOME
相关联的引用分配给变量str
第一个声明创建一个新的String,其值为常量SOME
的值,并将其引用赋值给变量str
。
在第一种情况下,创建了第二个String,其值与SOME
相同,这意味着更多的初始化时间。 因此,你应该避免它。 此外,在编译时,所有常量SOME
都转换为相同的实例,使用的内存要少得多。
因此,总是喜欢第二种语法。
第一个将在堆中创建新的String对象,str将引用它。 另外,literal也将放在String池中。 这意味着将创建2个对象和1个引用变量。
第二个选项将仅在池中创建String文字,str将引用它。 因此,只创建1个对象和1个引用。 此选项将始终使用String池中的实例,而不是每次执行时都创建新实例。