Для уточнения типа float используется символ f, как уточнить тип byte?
Для уточнения типа float используется символ f,
float value = 1f;
как уточнить тип byte?
пробовал
byte isDelete = (b)?1:0;//ошибка
byte isDelete = (b)?1b:0b;//ошибка
Ответы (2 шт):
Начиная с 8ой версии java выделен специальный вид бинарных литералов (binary literals):
byte variable1 = 0b00000001;
byte variable2 = 0b11111111;
При этом, вы также можете пользоваться шестнадцатеричными летералами:
byte variable1 = 0b01;
byte variable2 = 0xFF;
Тоже самое относится и к целочисленным литералам (вопреки указанному вами):
byte variable1 = -128;
byte variable2 = 127;
Очевидно, что в случае превышения максимально допустимого значения в рамках типа byte (256 значений, которые накладываются на следующий целочисленный интервал: [-128, 127]), то вы получите ошибку на этапе компиляции:
byte variable = 128; // compilation error: incompatible types: possible lossy conversion from int to byte
Любое выражение, если в нем использованы только целые литералы без указания типа или целые подвыражения типа не выше чем int, считается выражением типа int.
Eсли в целом выражении использованы подвыражения типа long (например, целый литерал с постфиксом "L", типа 123L, или переменная типа long, или результат вызова метода с возвращаемым типом long), то и всё выражение относится к типу long.
Если же в выражении есть литералы или подвыражения типа float или типа double, то такое выражение относится к типу double.
Например,
(byte)8 + (byte)2 // тип int
(byte)8 - 2L // тип long
3.456 * (short)5 // тип double
3.456f / 5.6f // тип double
При вычислении выражения все его операнды перед собственно вычислением преобразуются к типу самого выражения и результат вычислений тоже относится к этому же типу.
Исключение из этого правила -- это присваивание переменной значения константного выражения, т. е. такого, которое состоит только из литералов и констант, и значит может быть вычислено во время компиляции. Тогда присваивание такого типа проходит, но только при условии, что вычисленный результат укладывается в диапазон значений, допустимый для типа той переменной, которой мы его присваиваем. Примеры таких исключений приведены в ответе @StateItPrimitive.
Таким образом, ваше (b)?1:0; является выражениями типа int, а (b)?1b:0b вообще непонятно что, поскольку выражений типа 1b, 0b в Java не существует. Чтобы полученное значение первого из этих выражений присвоить переменной типа byte, надо его явно преобразовать к этому типу:
byte result = (byte)( (b)? 1 : 0 );
Или иначе можно сделать переменную b константой (напр. добавить final к ее определению),
и тогда это будет константное выражение и оно тоже будет компилироваться, в соответствии с исключением, описанным в предыдущем абзаце.
PS И кстати, полезно читать сообщения об ошибках. Там есть намёки на то, что именно неладно в вашем коде.