Ответ 1
Легко с идеей 14:
- просто наведите курсор на конкатенацию строк
- Нажмите alt + enter
- Выберите "Копировать текст последовательности строк в буфер обмена"
- Вставить результат где-нибудь.
Пример кода:
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. Вы меня понимаете?:)
Легко с идеей 14:
Вы можете увидеть конкатенированную строку "ONETWOTHREE"
компиляции, декомпилируя байт-код:
javap -c StringHolder
и глядя на первое задание.
Конкатенация для first + second + third
будет выполняться во время выполнения, а не во время компиляции, поэтому я ожидаю увидеть код с помощью StringBuilder
или StringBuffer
, и не будет "результата" этого string concatenation без запуска кода.
public static final String ONE = "ONE";
public static final String TWO = "TWO";
public static final String THREE = "THREE";
являются константами времени компиляции и будут включены во время компиляции.
Итак, вы можете увидеть результат в файле .class
, сгенерированном декомпиляцией. Другой result
не будет отображаться до времени выполнения.
В someVariable
вы увидите что-то вроде someVariable = "ONETWOTHREE";
в декомпилированном коде. Компилятор делает это для оптимизации, так что это видно.