gpt4 book ai didi

java - 使用相同的字符串文字而不是最终变量有什么好处?

转载 作者:IT老高 更新时间:2023-10-28 21:05:03 24 4
gpt4 key购买 nike

我遇到了一个包含多个使用字符串文字“foo”的类。

我想知道的是,使用这种方法而不是将 String 声明为 final 并用 final 变量替换所有文字有什么好处和影响(在对象创建、内存使用和速度方面) ?

例如(虽然显然不是真正的单词用法):

private static final String FINAL_STRING = "foo";

public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println(FINAL_STRING);
}
}

对比:

public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println("foo");
}
}

哪个更可取,为什么(假设字符串值保持不变)?

上面的(第二个)示例会导致创建 10 个 String 对象,还是 JVM 会意识到实际上只使用了一个文字,并创建一个引用。如果是这样,将 String 声明为 final 有什么好处(如第一个示例中所示)?

如果解释的代码确实用单个引用替换了字符串文字,那么如果相同的文字出现在多个地方,这是否仍然适用:

public void stringPrinter(){
for(int i=0;i<5;i++){
System.out.println("foo"); // first occurence
System.out.println("foo"); // second occurence
}
}

最佳答案

它们将完全相同。在这两种情况下,文字都被保留(导致该字符串与所有其他常量/文字共享相同实例的任何编译时常量表达式),并且智能编译器+运行时应该可以轻松地将两者都减少到最优化的示例。

优势更多在于可维护性。如果你想改变文字,你只需要用一个常量改变一次出现,但如果它们被内联包含,你需要搜索和更改每个实例。

关于java - 使用相同的字符串文字而不是最终变量有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4830403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com