为什么 Java 不支持无符号 ints?

2022-08-31 04:39:26

为什么 Java 不支持无符号整数?

在我看来,这似乎是一个奇怪的遗漏,因为它们允许人们编写不太可能在意外的大输入上产生溢出的代码。

此外,使用无符号整数可以是一种自我记录的形式,因为它们表明无符号int旨在保存的值永远不会是负的。

最后,在某些情况下,无符号整数对于某些操作(如除法)可能更有效。

包含这些内容的缺点是什么?


答案 1

这是来自对高斯林和其他人关于简单的采访:

高斯林:对于我这个语言设计师来说,我如今并不认为自己是这样,“简单”的真正含义是,我能指望J. Random Developer把规范放在脑海里吗?这个定义说,例如,Java不是 - 事实上,很多这些语言最终都有很多角落的情况,没有人真正理解的东西。向任何C开发人员询问无符号,很快你就会发现,几乎没有C开发人员真正了解无符号发生了什么,无符号算术是什么。这样的事情使C变得复杂。我认为,Java的语言部分非常简单。您必须查找的库。


答案 2

在字里行间阅读,我认为逻辑是这样的:

  • 通常,Java设计人员希望简化可用数据类型的库。
  • 对于日常目的,他们认为最常见的需求是签名数据类型
  • 为了实现某些算法,有时需要无符号算术,但是实现此类算法的程序员也将具有“工作”的知识,可以使用有符号数据类型进行无符号算术。

大多数情况下,我会说这是一个合理的决定。可能的话,我会:

  • 使字节无符号,或者至少为这一种数据类型提供了签名/无符号的替代方案,可能具有不同的名称(对其进行签名有利于一致性,但是您何时需要签名字节?
  • 去掉了“short”(你最后一次使用16位有符号算术是什么时候?

尽管如此,由于有点笨拙,对高达32位的无符号值的操作并不是太糟糕,大多数人不需要无符号的64位划分或比较。