Побитовая операция без конкатенации со строкой в ​​print () в Java - PullRequest
0 голосов
/ 04 декабря 2018

Этот код

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 Ответ

0 голосов
/ 04 декабря 2018

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

("The result is " + a) ^ a

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

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

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

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