При работе с числами в формате BCD и, следовательно, со многими бинарными операторами я недавно обнаружил следующее поведение:
При использовании любого бинарного оператора для символа и присвоении его обратно символьной переменной компилятор выдает ошибку несовместимого типа:
public class Test {
public static void main(String[] args) {
char c = 0;
char d = c & 0;
}
}
Выход:
Test.java:4: error: incompatible types: possible lossy conversion from
int to char
char d = c & 0;
^
1 error
Он отлично работает, когда компилятор знает, что значение умещается в 16 бит — следующий пример компилируется просто отлично:
public class Test {
public static void main(String[] args) {
char d = 32767 & 0;
}
}
(работает любое число ниже 2^15). Таким образом, очевидно, что здесь символы неявно преобразуются в целые числа. Это имеет смысл для оператора сдвига влево, но в остальном это действительно раздражает и не имеет для меня никакого смысла.
Почему это происходит и в каком случае это может быть полезно?
byte
илиshort
. - person shmosel   schedule 04.03.2019