Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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,这是一个概念性的问题。我知道弦是恒定的;它们的值在创建后无法更改。考虑这个声明- private final static String ABC = "abc"; vs 为什么第一个在性能方面更好 如果ABC的值没有在类中任何地方直接更新,那么第二个值为什么需要呢 提前感谢。第一个更好,因为在所有实例中都不会有额外的字符串引用。因为它们都是常量表达式,所以在类字节码(使用它们的值)中会得到相同的行为 如果你在任何地方使用反射,也有一些不同的考虑。 < P>第一个为你的类的所有实例只创建一个副

这是一个概念性的问题。我知道弦是恒定的;它们的值在创建后无法更改。考虑这个声明-

private final static String ABC = "abc"; 
vs

为什么第一个在性能方面更好

如果ABC的值没有在类中任何地方直接更新,那么第二个值为什么需要呢


提前感谢。

第一个更好,因为在所有实例中都不会有额外的
字符串
引用。因为它们都是常量表达式,所以在类字节码(使用它们的值)中会得到相同的行为


如果你在任何地方使用反射,也有一些不同的考虑。

< P>第一个为你的类的所有实例只创建一个副本。但是第二个为每个实例创建ABC。


第一个可以在不使用对象本身的情况下调用。

您理解静态<代码>和非静态<代码>之间的区别吗?字符串是不可变的,但不一定是常量。@oliver Charlesworth-是的,我理解静态和非静态之间的区别。这个问题是专门针对字符串的。感谢所有将问题标记为重复的人,但作为重复提供的链接没有回答我的问题。@iamnotmaynard-请参阅此链接-“字符串是常量;它们的值在创建后不能更改。字符串缓冲区支持可变字符串。因为字符串对象是不可变的,所以它们可以共享。例如:不要像对待任何其他数据类型一样对待java中的字符串,这一点很重要。这是大多数开发人员都没有注意到的。我试图用这个问题纠正我的基本知识。
private final String ABC = "abc";