Как Java внутренне обрабатывает `string` incatenation operator`+`в цепочке?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как Java внутренне обрабатывает `string` incatenation operator`+`в цепочке?

Сообщение Anonymous »

Вот код: < /p>

Код: Выделить всё

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!"; // + concatenation chain
System.out.println(s);
}
}
< /code>
javap
output:

Код: Выделить всё

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 +
цепочка

Код: Выделить всё

String s = "Hello" + i + compute() + b + l + "world!";
< /code>
was converted to StringBuilder.append().append().append()...
цепочка с соответствующим следующим образом. Append () В порядке + concatenations. Поскольку java 9 эта строка s = "hello" + i + compute () + b + l + "world!"; заменен одним indokedynamic вызовать передачи аргументов на внутренние jvm реализация.
Можете ли вы помочь мне получить подробную информацию о внутренних пунктах - что происходит с момента вызова indokedynamic , и в тот момент, когда у нас есть соединенная строка ?

Мне также интересно, происходит ли бокс (для вызова соответствующих методов toString () , т. Е. Long.toString (), integer.toString (), ... )?

Подробнее здесь: https://stackoverflow.com/questions/794 ... in-a-chain
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как Java внутренне обрабатывает `string` incatenation operator`+`в цепочке?
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как Java внутренне обрабатывает `string` incatenation operator`+`в цепочке?
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Clang не удается создать экземпляр `operator!=()` из `operator==()` с типом возвращаемого значения `auto` для объекта кл
    Anonymous » » в форуме C++
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Назначьте ввод Map> выходу Map>
    Anonymous » » в форуме JAVA
    0 Ответы
    125 Просмотры
    Последнее сообщение Anonymous
  • Конвертировать Map > для списка > используя API потока
    Anonymous » » в форуме JAVA
    0 Ответы
    102 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»