【发布时间】:2011-10-17 01:44:32
【问题描述】:
由于某些莫名其妙的原因,byte 原始类型是用 Java 签名的。这意味着有效值是 -128..127,而不是通常的 0..255 范围,表示一个字节中的 8 个有效位(没有符号位)。
这意味着所有字节操作代码通常都会进行整数计算并最终屏蔽掉最后 8 位。
我想知道是否存在任何 Java byte 原始类型非常适合的现实生活场景,或者这只是一个完全无用的设计决策?
编辑:唯一的实际用例是本地代码的单字节占位符。换句话说,不能在 Java 代码中作为字节进行操作。
编辑:我现在看到一个内部紧密循环需要除以 7(数字 0..32)的地方,因此可以使用字节作为数据类型来完成查找表,因此可以保持较低的内存使用量L1 缓存使用情况。这不是指有符号/无符号,而是实际使用的情况。
【问题讨论】:
-
我经常编写操作字节数组的代码。这是很常见的事情。
-
@Chris Lively - 我不同意。 Java 大多是好的设计决策,也有一些坏苹果
-
签名的不仅仅是
byte。除了char,我相信所有原始整数数据类型(int、short、long和byte)都是有符号的。没有可以应用于其中任何一个的无符号修饰符。在一致性的意义上,这是有道理的。我认为真正的问题是缺少无符号整数数据类型是否有意义。 -
@Chris,“Write Once Run Everywhere”——足以让我们忍受大多数坏东西。他们那是对的。
-
@Thorbjørn Ravn Andersen:嗯……我的 Java 朋友实际上说的有点不同:“一次编写,到处调试”;)一切都很有趣。无论哪种方式,为一个好问题 +1。