Java – 在函数内创建具有常量值的字符串
发布时间:2020-12-15 04:36:14 所属栏目:Java 来源:网络整理
导读:哪一个更好? public class A { private static final String DOSOMETHING_METRICS = "doSomethingmetrics"; private static final String SAYSOMETHING_METRICS = "saySomethingmetrics"; public void doSomething() { ... System.out.println("Metrics for
哪一个更好?
public class A { private static final String DOSOMETHING_METRICS = "doSomethingmetrics"; private static final String SAYSOMETHING_METRICS = "saySomethingmetrics"; public void doSomething() { ... System.out.println("Metrics for " + DOSOMETHING_METRICS + "is something"); } public void saySomething() { ... System.out.println("Metrics for " + SAYSOMETHING_METRICS + "is something"); } } 要么 public class A { public void doSomething() { final String DOSOMETHING_METRICS = "doSomethingmetrics"; ... System.out.println("Metrics for " + DOSOMETHING_METRICS + "is something"); } public void saySomething() { final String SAYSOMETHING_METRICS = "saySomethingmetrics"; ... System.out.println("Metrics for " + SAYSOMETHING_METRICS + "is something"); } } 我认为方法1在内存优化的情况下获胜,因为编译器只分配了一次内存,垃圾收集器不需要释放在每个函数调用中创建的字符串.但是,我认为良好的编码实践建议变量应该绑定到必须使用的范围,并且常量应该定义为它们在方法2获胜的程序中首次使用时的常量. 你对此有什么看法?哪个方面更重要?这里的函数将被多次调用(比如说至少100K次). 解决方法
在这两种情况下,这些都是
JLS 4.12.4中定义的常量变量.因此,不仅字符串“doSomethingmetrics”和“saySomethingmetrics”被中断,而且“doSomethingmetrics的度量标准是某种东西”和“Saysomethingmetrics的度量标准”也是如此. (是的,你需要在“是”之前添加一个空格.)
第一个版本在逻辑上有一个稍小的堆栈,但我希望JIT无论如何都要优化它. 我会使用你认为最具可读性的形式.如果您想确切知道特定应用程序的性能,那么正如以往一样,正确的做法是测试两种方式. 看看javap -v的结果,看起来第二种方法实际上有一点点优势,即非连接字符串甚至不需要出现在常量池中,因为无法到达它们.所以你应该看到你的类文件在这方面变得越来越小.但同样,我非常怀疑这会有什么不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |