Подтвердить что ты не робот

Как узнать статическую конкатенацию результата строки в Intellij Idea без запуска кода?

Пример кода:

public class StringHolder{
    public static final String ONE = "ONE";
    public static final String TWO = "TWO";
    public static final String THREE = "THREE";

    public static void main (String[] args){
        String someVariable = ONE + TWO + THREE;
    }
}

Как я могу оценить значение String из статических констант?. Например, с Intellij Idea я могу запустить программу в отладке, поставить точку останова, нажать "ctrl + alt + f8" в выражении и увидеть значение выражения. Так можно ли это оценивать с помощью статического анализатора без кода компиляции и запуска программы? Ключевым моментом является значение, вычисленное из статических констант не из параметра функции, поэтому анализатор просто "переходит" к постоянному значению, объединяет их и показывает мне значение во всплывающем окне.

Другая ситуация, когда у меня есть блок и только что инициализированные переменные:

{
    final String a = "a";
    final String b = "b"
    final String c = "c"
    String result = a+b+c;
}

P.S. Вы меня понимаете?:)

4b9b3361

Ответ 1

Легко с идеей 14:

  • просто наведите курсор на конкатенацию строк
  • Нажмите alt + enter
  • Выберите "Копировать текст последовательности строк в буфер обмена"
  • Вставить результат где-нибудь.

Ответ 2

Вы можете увидеть конкатенированную строку "ONETWOTHREE" компиляции, декомпилируя байт-код:

javap -c StringHolder

и глядя на первое задание.

Конкатенация для first + second + third будет выполняться во время выполнения, а не во время компиляции, поэтому я ожидаю увидеть код с помощью StringBuilder или StringBuffer, и не будет "результата" этого string concatenation без запуска кода.

Ответ 3

public static final String ONE = "ONE";
public static final String TWO = "TWO";
public static final String THREE = "THREE";

являются константами времени компиляции и будут включены во время компиляции.

Итак, вы можете увидеть результат в файле .class, сгенерированном декомпиляцией. Другой result не будет отображаться до времени выполнения.

В someVariable вы увидите что-то вроде someVariable = "ONETWOTHREE"; в декомпилированном коде. Компилятор делает это для оптимизации, так что это видно.