字符 f 用于限定浮点类型,
float value = 1f;
如何指定字节类型?
像这样尝试过:
byte isDelete = (b) ? 1 : 0; // ошибка
byte isDelete = (b) ? 1b : 0b; // ошибка
字符 f 用于限定浮点类型,
float value = 1f;
如何指定字节类型?
像这样尝试过:
byte isDelete = (b) ? 1 : 0; // ошибка
byte isDelete = (b) ? 1b : 0b; // ошибка
从 java 的第 8 版开始,分配了一种特殊的二进制文字(二进制文字):
但是,您也可以使用十六进制文字:
这同样适用于整数文字(与您指出的相反):
显然,如果你超过了字节类型内的最大允许值(256 个值与下一个整数区间重叠:)
[-128, 127],那么你会得到一个编译时错误:任何仅使用没有类型说明的整数文字或类型不高于 的整数子表达式的表达式都
int被视为类型的表达式int。如果在整个表达式中使用了类型子表达式
long(例如,带有后缀“L”的整数文字,类型为123L,或类型为 的变量long,或返回类型为 的方法调用的结果long),那么整个表达式的类型long。如果表达式包含 type
float或 type的文字或子表达式double,则表达式为 typedouble。例如,
当一个表达式被求值时,它的所有操作数在实际计算之前都被转换为表达式本身的类型,并且计算的结果也属于同一类型。
此规则的一个例外是将常量表达式的值分配给变量,即仅由文字和常量组成的变量,因此可以在编译时进行评估。然后这种类型的赋值通过,但前提是计算结果在我们分配给它的变量类型所允许的值范围内。有关此类异常的示例,请参阅@StateItPrimitive 的答案。
因此,你
(b)?1:0;的是 type 的表达式int,但(b)?1b:0b通常不清楚什么,因为 type 的表达式不1b存在。要将这些表达式中的第一个获得的值分配给类型为 的变量,必须将其显式转换为该类型:0bJavabyte或者,您可以将变量设为
b常量(例如将final其添加到其定义中),然后它将成为常量表达式,并且也将根据上一段中描述的异常进行编译。PS顺便说一句,阅读错误消息很有用。提示您的代码中到底有什么问题。