Java8中的无符号整数类型?

Java8中的无符号整数类型?,java,java-8,Java,Java 8,Java设计器认为无符号整数是不必要的。具体来说,他们认为无符号的概念主要用于指定高阶位的行为,高阶位定义整数值的符号。Java通过添加一个特殊的无符号右移运算符>>>,以不同的方式管理高位的含义。因此,不需要使用无符号整数类型。那么,为什么Java8会支持无符号整数呢 对于第一部分,我倾向于保持代码的简单性 更复杂但可能更快的算法。测试需要编写 对于无符号除法和余数方法,但是 回归测试相当广泛 为了避免必须处理装箱对象的开销 无符号功能作为整数上的静态方法实现 而不是引入新类型,如 Unsig

Java设计器认为无符号整数是不必要的。具体来说,他们认为无符号的概念主要用于指定高阶位的行为,高阶位定义整数值的符号。Java通过添加一个特殊的无符号右移运算符>>>,以不同的方式管理高位的含义。因此,不需要使用无符号整数类型。那么,为什么Java8会支持无符号整数呢

对于第一部分,我倾向于保持代码的简单性 更复杂但可能更快的算法。测试需要编写 对于无符号除法和余数方法,但是 回归测试相当广泛

为了避免必须处理装箱对象的开销 无符号功能作为整数上的静态方法实现 而不是引入新类型,如 UnsignedInteger和UnsignedLong


另请参阅:

Java8只包括一些帮助器方法,Java.lang.Integer和Java.lang.Long上的静态方法,它们实现了通常需要的操作

如果你知道的话,它们中的大多数都是非常琐碎的,但是经验表明,许多程序员都在为这些操作找到简单的解决方案而努力,这一点从SO的大量相关问题中可以明显看出

有符号整数和无符号整数之间没有神奇的区别,因为有符号和无符号的位模式看起来是一样的。不同之处在于对上述模式的解释。使用有符号类型模拟任何无符号操作相对简单,因此无符号类型不是执行无符号算术所必需的语言元素

简而言之:Java8中没有未签名的类型,因为如果有原语的话,添加它们将是一项巨大的工作,它还需要对字节码和jl进行大量的添加


有一些helper方法,因为这是一般joe开发人员通常需要的,而且很难找到正确的方法。

当您自己说除了解释数据类型之外,数据类型之间没有真正的区别时,为什么说向Java语言添加无符号类型需要字节码更改?请看,int是有符号的,char是无符号的,boolean是完全不同的,但这三种类型在字节码级别上使用相同的数据类型处理。这都是关于如何解释数据的问题。@Holger我不完全排除可以在编译器级别添加无符号类型,但这意味着某些操作必须以非常迂回的方式实现,尤其是比较运算符>,>=,可以通过生成对Java8中添加的静态方法的方法调用来编译这些操作。操作符在幕后创建方法调用并不罕见,请参见+获取字符串。但是,语言变化确实很大,而且违反直觉,例如,为了兼容性,数组长度/索引必须保持签名reasons@Holger您是对的,原则上,没有任何操作不能通过让编译器生成方法调用来实现。我个人认为这是一个半途而废的实现,但就语言史密特而言,这一点都不重要。考虑到java对小于int的类型上的操作的处理已经相当奇怪,隐式扩展到int对于一些WTF是好的,我甚至不确定我是否希望看到无符号原语: