Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串声明_Java_String - Fatal编程技术网

Java字符串声明

Java字符串声明,java,string,Java,String,String str=new String(“SOME”)和String str=“SOME” 这些声明是否会带来性能差异。两者之间有一点差异 第二个声明将与常量SOME关联的引用分配给变量str 第一个声明创建一个新字符串,该字符串的值为常量SOME,并将其引用分配给变量str 在第一种情况下,创建了第二个字符串,其值与SOME相同,这意味着更多的初始化时间。因此,你应该避免它。此外,在编译时,所有的常量和一些都被转换到同一个实例中,这样使用的内存要少得多 因此,始终首选第二种语法 Strin

String str=new String(“SOME”)
String str=“SOME”

这些声明是否会带来性能差异。

两者之间有一点差异

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

第一个声明创建一个新字符串,该字符串的值为常量
SOME
,并将其引用分配给变量
str

在第一种情况下,创建了第二个字符串,其值与
SOME
相同,这意味着更多的初始化时间。因此,你应该避免它。此外,在编译时,所有的常量
和一些
都被转换到同一个实例中,这样使用的内存要少得多

因此,始终首选第二种语法

String str = new String("SOME")
始终在堆上创建新对象

String str="SOME" 
使用

试试这个小例子:

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

        System.err.println(s1 == s2);
        System.err.println(s2 == s3);

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

第一种形式将在堆中创建新的字符串对象,str将引用它。此外,文本也将放置在字符串池中。这意味着将创建2个对象和1个引用变量


第二个选项将仅在池中创建字符串文字,str将引用它。因此,只会创建一个对象和一个引用。此选项将始终使用字符串池中的实例,而不是每次执行时都创建一个新实例。

对于记录,在某些情况下,
new String(String)
是有意义的,例如如果您有一个非常大的字符串,而您只想保留一个小的子字符串。
substring
方法只返回原始字符串的flyweight视图,因此使用
新字符串(hugeString.substring(a,b))
强制复制,并允许GC在超出范围时回收
hugeString
的内容。他们不应该让它成为一个构造器,虽然…确实是一个有趣的优化案例,但在做了一些探查器检查之前,我不会走这条路(我想你也会这样)。另请参见和
String s1 = "Welcome"; // Does not create a new instance  
String s2 = new String("Welcome"); // Creates two objects and one reference variable