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

Reply via email to