James Gosling对Java字节为什么是有符号的解释

2022-08-31 17:20:28

我最初感到惊讶的是,Java决定指定签名,范围从(包括)。我的印象是,大多数8位数字表示都是无符号的,而是有一定范围的(例如,点十进制表示法的IPv4)。byte-128..1270..255

那么,詹姆斯·高斯林(James Gosling)是否曾被要求解释为什么他决定签署呢?过去,权威编程语言设计师和/或批评者之间是否就此问题进行了值得注意的讨论/辩论?byte


答案 1

看来,简单是主要原因。从这次采访中

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

我最初的假设是,这是因为Java根本没有无符号数字类型。为什么应该是一个例外? 是一个特例,因为它必须表示UTF-16代码单元(感谢Jon Skeet的引用)bytechar


答案 2

根据“Oak Language Specification 0.2”(又名Java语言):

“Oak字节类型是C程序员习惯于认为的char类型。但在 Oak 语言中,字符的宽度为 16 位。具有单独的字节类型消除了C中char解释为8位整数和字符之间的混淆。

你可以从这里获取一个后记副本:

http://cretesoft.com/archive/files/OakSpec0.2.ps抄写部分副本))

此外,此站点上还发布了部分采访内容:(他为java中没有无符号字节进行辩护)

http://www.darksleep.com/player/JavaAndUnsignedTypes.html

添加从上述页面获取的采访...

*" http://www.gotw.ca/publications/c_family_interview.htm

问:程序员经常用“简单语言”谈论编程的优缺点。这句话对你来说意味着什么,在你看来,[C/C++/Java]是一种简单的语言吗?

里奇:[为简洁起见,已删除]

斯特鲁斯特鲁普:[为简洁起见,删除]

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

另一方面。。。。据 http://www.artima.com/weblogs/viewpost.jsp?thread=7555

从前有一棵橡树...作者 Heinz Kabutz July 15, 2003

...为了填补我在Java历史中的空白,我开始在Sun的网站上四处挖掘,最终偶然发现了Oak版本0.2的Oak语言规范。Oak是现在通常称为Java的原始名称,本手册是Oak(即Java)可用的最古老的手册。...无符号整数值(第 3.1 节)

该规范说:“宽度为8位,16位,32位和64位的四种整数类型,并且带有符号,除非以无符号修饰符为前缀。

在侧边栏中,它说:“未签名尚未实现;它可能永远不会。你是多么正确。"*