代码之家  ›  专栏  ›  技术社区  ›  user2490003

Java中的字符串连接相对于其他编译语言有多慢/快?[关闭]

  •  0
  • user2490003  · 技术社区  · 6 年前

    this guide 我注意到下面的片段,描述了Junit框架的最新更新。

    现在我们可以在JUnit 5中的lambda中编写断言消息,允许 在需要之前跳过复杂消息构造的延迟计算:

    @Test
    public void shouldFailBecauseTheNumbersAreNotEqual_lazyEvaluation() {
        Assertions.assertTrue(
          2 == 3, 
          () -> "Numbers " + 2 + " and " + 3 + " are not equal!");
    }
    

    在Java中计算字符串真的那么慢吗(相对于其他语言?)。它与其他编译语言如C、Golang等相比如何。。?

    2 回复  |  直到 6 年前
        1
  •  4
  •   GhostCat    6 年前

    关键是:没有 懒惰的

    意思是,在C语言中,你可能会看到如下内容:

    #define debug_print...
    

    (参见一些真实世界的例子 here

    其思想是定义一个宏,向其传递一个复杂的字符串。但是编译器确保代码只在字符串实际存在的情况下生成。

    debug_print() ,生成传递给宏调用的消息可能需要复杂的字符串concat

    在Java中,我们根本无法表达这一点。你总是要走

    if (someCondition) {
      then pull together that large string
    

    因此:这是 一点也不 关于字符串concats的成本。是关于 只有

    并回答实际问题:最后,当代码被足够频繁地调用时,JIT无论如何都会把它变成经过仔细优化的机器代码。因此:实际的字符串concat是 这个问题。

    换言之:您不会从以下方面考虑Java的“性能” 源代码

        2
  •  0
  •   Steve11235    6 年前

    这是底线。从Java开始,不要担心诸如字符串连接之类的小性能问题。对于大型应用程序服务器来说,这可能是一个小问题,因为在大型应用程序服务器中,会执行大量字符串连接,但不会使用结果。一个例子是日志记录,其中的日志级别导致忽略事件。此外,Java使用StringBuilder连接一系列由“+”运算符分隔的文本,这是一种性能合理的方法。