Код: Выделить всё
import java.util.Random;
public class StringConcatCompilerOptimization
{
private static long compute() {
var random = new Random();
var l = random.nextLong();
return l;
}
public static void main(String[] args)
{
int i = 1;
byte b = 120;
boolean l = true;
String s = "Hello" + i + compute() + b + l + "world!";
System.out.println(s);
}
}
< /code>
javap
Код: Выделить всё
Compiled from "StringConcatCompilerOptimization.java"
public class StringConcatCompilerOptimization {
public StringConcatCompilerOptimization();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: bipush 120
4: istore_2
5: iconst_1
6: istore_3
7: iload_1
8: invokestatic #14 // Method compute:()J
11: iload_2
12: iload_3
13: invokedynamic #19, 0 // InvokeDynamic #0:makeConcatWithConstants:(IJBZ)Ljava/lang/String;
18: astore 4
20: getstatic #23 // Field java/lang/System.out:Ljava/io/PrintStream;
23: aload 4
25: invokevirtual #29 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
28: return
}
< /code>
Before Java 9 such +
Можете ли вы помочь мне получить подробную информацию о внутренних пунктах - что происходит с момента вызова indokedynamic , и в тот момент, когда у нас есть соединенная строка ?
Мне также интересно, происходит ли бокс (для вызова соответствующих методов toString () , т. Е. Long.toString (), integer.toString (), ... )?
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-a-chain