Побитовая операция, не связанная со строкой в print() в Java

Этот код

int a = 6;
System.out.print("The result is " + a*a);

работает отлично, но этот

int a = 6;
System.out.print("The result is " + a^a);

создает исключение:

Исключение в потоке "main" java.lang.RuntimeException: Некомпилируемый исходный код. Ошибочный тип дерева: at pkg1.pkg4.taking.input.TakingInput.main(TakingInput.java:11)

Почему так?

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

System.out.print(a&b + "\n" + a|b + "\n" + a^b);

Я искал описание метода print() и несколько тем по побитовым операторам и печатал на консоли на SO, включая рекомендуемые темы при составлении вопроса, но не смог найти ответ.

Ответ 1

Это связано с тем, что + имеет более высокий приоритет, чем ^ поэтому он компилируется:

("The result is " + a) ^ a

Который, очевидно, не сработает. Поместите вокруг нее круглые скобки:

System.out.print("The result is " + (a^a));

Или, как сказал Хольгер, вы можете устранить эту проблему, используя printf:

System.out.printf("The result is %d", a^a);