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";