On Thu, 2 Jun 2022 20:01:33 GMT, Claes Redestad <redes...@openjdk.org> wrote:
>> make/jdk/src/classes/build/tools/classlist/HelloClasslist.java line 116: >> >>> 114: String CC = "string" + c; >>> 115: String CCS = "string" + c + s; >>> 116: String CSCC = "string" + s + "string" + c; >> >> I’m pretty sure that `f` and `c` will be inlined as compile‑time constants >> in the String concat recipes. > > You would think that, but javac doesn't do anything fancy once you store to a > local > > javap output for lines 108 through 111: > > 449: ldc #148 // float 0.1f > 451: fstore 31 > 453: fload 31 > 455: invokedynamic #149, 0 // InvokeDynamic > #4:makeConcatWithConstants:(F)Ljava/lang/String; > 460: astore 32 > 462: fload 31 > 464: aload 4 > 466: invokedynamic #152, 0 // InvokeDynamic > #7:makeConcatWithConstants:(FLjava/lang/String;)Ljava/lang/String; > 471: astore 33 > 473: aload 4 > 475: fload 31 > 477: invokedynamic #155, 0 // InvokeDynamic > #10:makeConcatWithConstants:(Ljava/lang/String;F)Ljava/lang/String; I guess it only happens for `final` locals. ------------- PR: https://git.openjdk.java.net/jdk/pull/8855