Он гарантированно будет рассматриваться как константное выражение и гарантированно будет интернирован в разделе 15.28 JLS :
Постоянное выражение времени компиляции
выражение, обозначающее значение
примитивный тип или строка, которая делает
не завершена внезапно и состоит
используя только следующее:
- Литералы примитивного типа и литералы типа String (§3.10.5)
- Приводит к примитивным типам и приводит к типу String
- Унарные операторы +, -, ~ и! (но не ++ или -)
- Мультипликативные операторы *, /, и%
- Аддитивные операторы + и -
- ...
...
Константы времени компиляции типа String
всегда "интернированы", чтобы поделиться
уникальные экземпляры, использующие метод
String.intern.
Теперь, это не совсем говорит, что оно гарантированно будет встроенным. Тем не менее, раздел 13.1 спецификации гласит:
Ссылки на поля, которые являются постоянными
переменные (§4.12.4) разрешаются в
время компиляции до постоянного значения
это обозначено. Нет ссылки на такие
постоянное поле должно присутствовать в
код в двоичном файле (кроме
класс или интерфейс, содержащий
постоянное поле, которое будет иметь код
инициализировать его), и такая константа
поля должны всегда отображаться как
инициализируется; начальное значение по умолчанию
для типа такого поля необходимо
никогда не будет замечено.
Другими словами, , даже если само выражение не является константой , не должно быть ссылки на Class1
. Так что да, ты в порядке. Это не обязательно гарантирует, что объединенное значение используется в байт-коде, но биты, на которые ссылаются ранее, гарантируют, что объединенное значение интернировано, поэтому я был бы чрезвычайно удивлен, если оно не только встроенное объединенное значение. Даже если это не так, вы гарантированно работаете без Class1
.