Похоже, что здесь вы ссылаетесь на объект final String stringObject = (String) object;
, это больше не константа времени компиляции, а константа времени выполнения.Первый пример из здесь ускользает от него с частью:
String s = "lo";
String str7 = "Hel"+ s;
String str8 = "He" + "llo";
System.out.println("str7 is computed at runtime.");
System.out.println("str8 is created by using string constant expression.");
System.out.println(" str7 == str8 is " + (str7 == str8));
System.out.println(" str7.equals(str8) is " + str7.equals(str8));
Строка str7 вычисляется во время выполнения, потому что она ссылается на другую строку, которая не является литералом, поэтому по этой логикеЯ предполагаю, что, несмотря на то, что вы делаете stringObject
final, он все еще ссылается на объект, поэтому не может быть вычислен во время компиляции.
А из спецификации java lang здесь он заявляет:
"Оператор конкатенации строк + (§15.18.1) неявно создает новый объект String, когда результат не является константным выражением времени компиляции (§15.28)."
Я не могу найтилюбые примеры, где можно использовать приведение, за исключением этого ужасного, ужасного примера:
System.out.println(hello == "hel" + ( String ) "lo");
, который вряд ли имеет какое-либо логическое применение, но, возможно, часть о приведении строки была включена из-за вышеприведенного случая.