Java字节原始类型是否有真正的生活用途?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

由于某些不可理解的原因,byte原始类型是用Java签名的。这意味着有效值是-128..127,而不是通常的0..255范围,表示一个字节中的8个有效位(没有符号位)。

这意味着所有的字节操作代码通常会进行整数计算并最终屏蔽掉最后的8位。

我想知道是否有任何真实的场景,Java byte基本类型完全适合,还是仅仅是一个完全无用的设计决策?

唯一的实际使用情况是本地代码的单字节占位符。换句话说,不要作为Java代码中的字节来操纵。

我现在已经看到了一个内部紧圈需要除以7(数字0..32),所以查找表可以完成与字节作为数据类型,所以内存使用可以保持低考虑L1缓存使用情况。这不是指签名/无符号,而是实际使用情况。

提问于
用户回答回答于

令人惊讶的是,我byte上周第一次在Java中使用,所以我确实有一个(虽然不常见)用例。我正在编写一个本地Java函数,它允许您在可以由Java调用的库中实现一个函数。Java类型需要转换为本地语言的类型,在本例中为C.

这个函数需要一个字节数组,但是(当时byte完全忘记了这个类型)我用了一个char[]。Java为C函数生成的签名给出了该参数的类型jcharArray,可以将其转换为一堆jchars,这些s是typedef-in jni.h中的unsigned short。当然,这是不一样的大小 - 它是2个字节而不是1个。这导致了底层代码的各种问题。使Java类型byte[]产生一个jbyteArray,并jbyte在Linux上进行typedef-ed signed char,这是正确的大小

用户回答回答于

我认为这背后的原因是java没有无符号数字类型,并byte应符合该规则。(注:char未签名,但不代表数字)

至于特定的问题:我想不出任何例子。即使有例子,它们也会比0..255的要少,而且它们可以用掩蔽(而不是大多数)来实现,

扫码关注云+社区