Java 8中的无符号整数类型?

时间:2014-08-26 15:00:55

标签: java java-8

Java设计师认为无符号整数是不必要的。具体来说,他们认为无符号的概念主要用于指定高阶位的行为,它定义了整数值的符号。 Java通过添加特殊的"无符号右移运算符>>>"来管理高位的含义。因此,消除了对无符号整数类型的需要。那么,为什么Java 8会对无符号整数有所支持。

2 个答案:

答案 0 :(得分:3)

  

对于第一次剪辑,我赞成保持代码直截了当   更棘手但可能更快的算法。需要编写测试   对于无符号除法和余数的方法,但除此之外   回归测试相当广泛。

     

为了避免必须处理盒装对象的开销,   无符号功能在Integer上实现为静态方法   和龙等,而不是像引入新类型   UnsignedInteger和UnsignedLong。

http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-January/008926.html

另请参阅:https://blogs.oracle.com/darcy/entry/unsigned_api

答案 1 :(得分:3)

Java 8只包含一些辅助方法(java.lang.Integer和java.lang.Long上的静态方法),它们实现了常用的操作。

其中大部分是非常简单的如果你知道http://en.wikipedia.org/wiki/Two%27s_complement但是,因为经验表明很多程序员都在努力(因为通过SO的相关问题的数量来证明这些操作的简单解决方案。

signed和unsigned int之间没有神奇的区别,被视为已签名和无符号的位模式看起来相同。不同之处在于对所述模式的解释。使用带符号类型模拟任何无符号运算相对简单,因此无符号类型不是执行无符号算术的绝对必要语言元素。

简而言之:Java8中没有无符号类型,因为添加它们是一项巨大的工作(如果有基元,它还需要对字节码和JLS进行大量添加)。

有一些辅助方法,因为这是通常需要的并且很难正确(对于普通的joe开发人员)。