Для уточнения типа float используется символ f, как уточнить тип byte?

Для уточнения типа float используется символ f,

float value = 1f;

как уточнить тип byte?

пробовал

byte isDelete = (b)?1:0;//ошибка
byte isDelete = (b)?1b:0b;//ошибка

Ответы (2 шт):

Автор решения: StateItPrimitive

Начиная с 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
→ Ссылка
Автор решения: m. vokhm

Любое выражение, если в нем использованы только целые литералы без указания типа или целые подвыражения типа не выше чем 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 И кстати, полезно читать сообщения об ошибках. Там есть намёки на то, что именно неладно в вашем коде.

→ Ссылка