为什么Java没有字符串的原始数据类型,而其他数据类型都有呢?
字符串是一个对象,它不是原始类型,只是字符数组。为什么Java存在原始类型是一个有趣的问题,引自James Gosling的一次采访:
Bill Venners: 为什么Java有原始类型呢?为什么不一切都是对象呢?
James Gosling: 完全是出于效率考虑。有各种各样的人构建了整个系统,其中int和其他类型都是对象。有各种方法可以实现这一点,但它们都有严重的问题。有些方法很慢,因为它们为所有事情分配内存。有些方法则尝试创建对象,有时它们是对象,有时它们不是(这就是标准LISP系统所做的),然后事情变得非常奇怪。它有点工作,但很奇怪。
只需使其存在原始类型和对象,并且它们是不同的。你就可以解决很多问题。
简而言之,原始类型因为效率原因而存在。
Integer foo = new Integer(aValueFoo);
。在我看来,如果看到 Integer foo Integer foo Integer foo Integer foo...
这样的代码排列会很混乱。当涉及到整数的更大事情时,Integer有其用处...基本类型是一种福音! - AMDGint、char、float、double等在内存中具有固定长度。例如,一个 int 占用 4 个字节,即 32 位。
但是字符串可以具有不同的长度,它实际上是一个 char 数组。
大多数编程语言不认为字符串是原始类型,因为实际上它是字符数组。原始类型几乎总是具有固定大小。
但我必须说,有些人可能会认为String是“原始的”,因为它是内置的。但从基本类型与组合类型相对立的意义上来看,它并不是原始类型。因为字符串是字符数组,它是一个组合类型。
string
作为原始类型可能会减少处理字符串时需要操作的对象数量,并允许实现一个支持子字符串的垃圾回收机制(如果字符串内容存储在特殊的“仅字符串”堆中,由GC管理)。这还将允许==
操作符按照+
的方式处理字符串内容。 - supercat