Java设计师认为无符号整数是不必要的。具体来说,他们认为无符号的概念主要用于指定高阶位的行为,它定义了整数值的符号。 Java通过添加特殊的"无符号右移运算符>>>"来管理高位的含义。因此,消除了对无符号整数类型的需要。那么,为什么Java 8会对无符号整数有所支持。
答案 0 :(得分:3)
对于第一次剪辑,我赞成保持代码直截了当 更棘手但可能更快的算法。需要编写测试 对于无符号除法和余数的方法,但除此之外 回归测试相当广泛。
为了避免必须处理盒装对象的开销, 无符号功能在Integer上实现为静态方法 和龙等,而不是像引入新类型 UnsignedInteger和UnsignedLong。
http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-January/008926.html
答案 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开发人员)。