面试再问字符串拼接,直接字节码怼他脸上,StringBuilder 有时是不需要的!

386 阅读1分钟

ps:这里的不需要,是说不需要去写

  • 首先看两个方法

    image-20210728170833200.png

    f1直接使用字符串拼接,f2 使用 StringBuilder 拼接

  • 一般人分析

    • f1 使用的是字符串直接拼接,会生成新的字符串对象,性能较低,不建议这样书写
    • f2 使用 StringBuilder,字符串缓冲区,减少对象创建,拼接效率也高

事实上,这两个方法运行起来完全一样

  • java 代码会编译成 class 文件运行,而在编译时,java 编译器就会做很多基本的代码优化,直接上编译后的字节码

    image-20210728170908969.png

    image-20210728170929826.png

  • 可以看到 f1 方法在编译后也使用了 StringBuilder 进行了字符串拼接

jdk8 测试字符串拼接使用了编译时优化,网络上信息说自 java1.7 开始就有了这种优化方式,读者可自行测试 这里写不写 StringBuilder 看似一样,实则根据实际情况,应选择简捷,使得代码格式清晰,可读性好的书写方式