加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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的结果,看起来第二种方法实际上有一点点优势,即非连接字符串甚至不需要出现在常量池中,因为无法到达它们.所以你应该看到你的类文件在这方面变得越来越小.但同样,我非常怀疑这会有什么不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读