有关Java为什么不支持无符号类型的问题以及一些处理无符号类型的问题。我进行了一些搜索,似乎Scala也不支持无符号数据类型。这个限制是在Java和Scala语言设计中,生成的字节码中还是在JVM本身中?是否可能存在一种在JVM上运行并且与Java(或Scala)完全相同的语言,但支持无符号原始数据类型?
有关Java为什么不支持无符号类型的问题以及一些处理无符号类型的问题。我进行了一些搜索,似乎Scala也不支持无符号数据类型。这个限制是在Java和Scala语言设计中,生成的字节码中还是在JVM本身中?是否可能存在一种在JVM上运行并且与Java(或Scala)完全相同的语言,但支持无符号原始数据类型?
Java字节码规范仅定义了有符号类型:
整数类型包括byte、short、int和long,它们的值为8位、16位、32位和64位的有符号二进制补码整数
但是在JVM上实现的语言可能可以在语法级别上添加无符号类型,并在编译阶段处理转换。
性能问题:每个简单算术操作都需要多个字节码操作。使用模拟无符号类型的代码性能将比使用有符号类型的代码差两到三倍。
兼容性问题:大多数在JVM上运行的语言都非常努力地与现有的大量Java代码兼容。当引入附加类型或需要以不同方式处理某些“已知”类型的变量时,这种兼容性会立即受到破坏。
考虑到这些问题,我认为无符号类型的好处微乎其微。
long
或浮点类型。其中,比较会比其他操作更频繁地使用,并且通常需要最少的时间。 - supercat