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池中的实例,而不是每次执行时都创建新实例。