由于一些莫名其妙的原因,byte原始类型是用Java签名的.这意味着有效值为-128..127而不是通常的0..255范围,表示一个字节中的8个有效位(没有符号位).
这意味着所有字节操作代码通常进行整数计算并最终屏蔽掉最后8位.
我想知道是否存在任何真实生活场景,其中Java byte原始类型完全适合,或者它是否只是一个完全无用的设计决策?
编辑:唯一的实际用例是本机代码的单字节占位符.换句话说,不要将其作为Java代码中的字节进行操作.
编辑:我现在已经看到一个内部紧密循环需要除以7(数字0..32)的位置,因此可以使用字节作为数据类型来完成查找表,以便考虑L1缓存使用时内存使用率保持较低.这不是指签名/无签名,而是实际使用的情况.
Boz*_*zho 33
Josh Bloch最近在一次演讲中提到,这是该语言中的一个错误.
我认为这背后的原因是java没有无符号数字类型,并且byte应该符合该规则.(注意:char是无符号的,但不代表数字)
至于具体问题:我想不出任何一个例子.即使有例子,它们也会少于0..255的那些,并且它们可以使用掩蔽(而不是大多数)来实现
irr*_*ble 16
byte, short, char 类型大多是无用的,除非在数组中使用以节省空间.
无论是Java的或JVM对他们产生任何切实的支持.几乎所有关于它们的操作都会将它们推向int或long首先.我们甚至无法写出类似的东西
short a=1, b=2;
a = a + b; // illegal
a = a << 1; // illegal
Run Code Online (Sandbox Code Playgroud)
那么为什么他们甚至会为定义byte, short, char类型操作而烦恼呢?
他们所做的只是偷偷摸摸地扩大转换程序,这会给程序员带来惊喜.
Mic*_*zek 10
令人惊讶的是,我byte上周第一次使用Java,所以我确实有一个(虽然不寻常)用例.我正在编写一个本机Java函数,它允许您在可以由Java调用的库中实现一个函数.需要将Java类型转换为本机语言中的类型,在本例中为C语言
该函数需要一个字节数组,但(当时byte完全忘记了这个类型)我需要一个char[].爪哇生成用于C函数签名给出参数作为类型jcharArray,其可以被转换成一串jchars,这是的typedef-ED中jni.h对unsigned short.当然,这不是相同的大小 - 它是2个字节而不是1.这导致了底层代码的各种问题.使Java类型byte[]产生一个jbyteArray,并且jbyte在Linux上是typedef-ed signed char,这是正确的大小
| 归档时间: |
|
| 查看次数: |
13569 次 |
| 最近记录: |