James Gosling解释了为什么Java的字节被签名

我最初感到惊讶,Java决定指定该byte是有符号的,范围从-128..127 (含)。 我的印象是,大多数8位数字的表示是无符号的,取而代之的是0..255的范围(例如, 以点分十进制forms的IPv4 )。

那么James Gosling有没有被要求解释他为什么决定byte被签名? 在权威的编程语言devise者和/或批评者之间,过去有关于这个问题的着名讨论/辩论?

看起来简单是主要原因。 从这次采访来看:

Gosling:对于我这样一个语言devise师来说,我真的不把自己算在这些日子里,真正意义上的“简单”意味着什么,我可以指望J.Random Developer在他的脑海中保持这个规范。 这个定义说,例如,Java并不是 – 实际上很多这些语言最终都会遇到大量的angular落案例,这些都是没有人真正理解的。 测验任何C开发者关于未签名的,很快你会发现几乎没有C开发者真正理解什么是无符号的,什么是无符号的算术。 像这样的事情使C复杂。 Java的语言部分我觉得很简单。 你必须查找库。

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

按照“橡树语言规范0.2”(又名Java语言)

“Oak字节types是C程序员习惯的字符types,但是在Oak语言中,字符宽度为16位,具有单独的字节types可以消除char之间8位混淆整数和作为一个字符“。

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

http://cretesoft.com/archive/files/OakSpec0.2.ps(scribd 部分复制 )

在这个网站上还有一个采访的一部分:(他在哪里捍卫Java中的无符号字节的缺席)

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

添加从上述页面采取的采访…

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

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

Ritchie:[简洁删除]

Stroustrup:[简洁删除]

Gosling:对于我这样一个语言devise师来说,我真的不把自己算在这些日子里,真正意义上的“简单”意味着什么,我可以指望J.Random Developer在他的脑海中保持这个规范。 这个定义说,例如,Java并不是 – 实际上很多这些语言最终都会遇到大量的angular落案例,这些都是没有人真正理解的。 测验任何C开发者关于未签名的,很快你会发现几乎没有C开发者真正理解什么是无符号的,什么是无符号的算术。 像这样的事情使C复杂。 Java的语言部分我觉得很简单。 你必须查找库。

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

曾经的橡树…由Heinz Kabutz 2003年7月15日

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

规范说:“8,16,32和64位的四个整数types的宽度,并且除非用无符号修饰符前缀,否则是带符号的。

在侧边栏中,它说:“未签名还没有实现,它可能永远不会。” 你是多么的正确。 “*

我不知道詹姆斯·高斯林(James Gosling)有任何直接引用,但是对于无符号byte有一个正式的RFE:

错误ID:4186775:请求无符号整数types,尤指 无符号byte

状态 :11-closures, 不会修复 ,请求增强

请扩展Javadevise以允许无符号types,特别是无符号byte

我一直在想,为什么在Java中没有无符号整数types。 在我看来,对于byte长度值是非常尴尬的没有他们[…]

我承认这是由Java开发人员做出的一个devise决定。 我不明白的是为什么 。 他们认为无符号的整数types是邪恶的还是有害的,并且select了保护我自己?

没有理由一个byte无符号。 当你有chartypes来表示字符时, byte通常不会做char那个工作。