On Tue, 8 Oct 2024 18:03:14 GMT, Chen Liang <li...@openjdk.org> wrote:
>> src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java >> line 193: >> >>> 191: String argName = i < ARG_NAME_CACHE_SIZE ? ARG_NAME_CACHE[i] : >>> null; >>> 192: if (argName == null) { >>> 193: argName = "arg$".concat(Integer.toString(i + 1)); >> >> With `Integer.toString` in the mix perhaps just as well keep this as a >> standard concat? >> Suggestion: >> >> argName = "arg$" + (i + 1); > > New bytecode in last commit's `computeArgName`: > > 0: ldc #186 // String arg$ > 2: iload_0 > 3: iconst_1 > 4: iadd > 5: invokestatic #188 // Method > java/lang/Integer.toString:(I)Ljava/lang/String; > 8: invokevirtual #193 // Method > java/lang/String.concat:(Ljava/lang/String;)Ljava/lang/String; > 11: areturn > > > Old bytecode in constructor: > > 222: iload 11 > 224: new #150 // class java/lang/StringBuilder > 227: dup > 228: invokespecial #152 // Method > java/lang/StringBuilder."<init>":()V > 231: ldc #155 // String arg$ > 233: invokevirtual #157 // Method > java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 236: iload 11 > 238: iconst_1 > 239: iadd > 240: invokevirtual #161 // Method > java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder; > 243: invokevirtual #164 // Method > java/lang/StringBuilder.toString:()Ljava/lang/String; > 246: aastore > 247: aload_0 > > I believe using concat is cleaner. Irrelevant; idiomatic concatenation is more concise in source and easier to read, comprehend and check, so should generally be preferred. That the legacy javac concat translatiom is lousy for constant + primitive is a different matter. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/21399#discussion_r1792328733