Побитовая операция, не связанная со строкой в 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);