Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么字符串没有基元类型? 为什么当大多数其他数据类型都是java时,Java没有一个原始类型?_Java_String_Primitive Types - Fatal编程技术网

为什么字符串没有基元类型? 为什么当大多数其他数据类型都是java时,Java没有一个原始类型?

为什么字符串没有基元类型? 为什么当大多数其他数据类型都是java时,Java没有一个原始类型?,java,string,primitive-types,Java,String,Primitive Types,大多数编程语言不考虑字符串基元,因为它实际上是一个字符数组。基本类型几乎总是有固定的大小 我应该说,虽然有些人认为字符串是“原始的”,因为它是内置的。但它不是基本类型,而不是复合类型。因为字符串是字符数组,所以它是复合类型。int、char、float、double等在内存中都有固定长度。e、 整数有4个字节,因此是32位 但是字符串可以有不同的长度,它实际上是一个字符数组 String是一个对象,它根本不是一个基本类型,只是一个字符数组。Java中存在基元类型的原因很有趣,摘自: 比尔·维纳斯

大多数编程语言不考虑字符串基元,因为它实际上是一个字符数组。基本类型几乎总是有固定的大小


我应该说,虽然有些人认为字符串是“原始的”,因为它是内置的。但它不是基本类型,而不是复合类型。因为字符串是字符数组,所以它是复合类型。

int、char、float、double等在内存中都有固定长度。e、 整数有4个字节,因此是32位


但是字符串可以有不同的长度,它实际上是一个字符数组

String是一个对象,它根本不是一个基本类型,只是一个字符数组。Java中存在基元类型的原因很有趣,摘自:

比尔·维纳斯:为什么会有原始人 Java中的类型?为什么不是一切都好 只是一个物体

詹姆斯·戈斯林:完全是一种效率 事情有各种各样的人 谁建立了ints和 这些都是对象。有一个 各种各样的方法,以及所有 他们有一些相当严重的问题 问题。他们中的一些人很慢, 因为它们为用户分配内存 一切。他们中的一些人试图这样做 物体有时在哪里 对象,有时它们不是 是标准LISP系统所做的), 然后事情变得很奇怪。信息技术 有点像,但很奇怪

只是让它有原语和对象,它们只是不同而已。你解决了很多问题


因此,简而言之,基元类型的存在是出于效率原因

啊。老实说,我希望根本没有原语。基本上和你在这里问的问题一样:你的意思是,为什么字符串没有“值类型”对象而不是原语类型?(即,如何将字符串放在堆栈上而不是堆上?@brainslaugs83:通过让它保存足以识别可能存储在其他位置的字符序列的信息[可能,但不一定,与其他对象存储在同一堆上]。作为一个简单的变体,让它保存一个
对象
,该对象将包含一个引用a
char[]
byte[]
,或
Integer
[取决于其长度以及是否包含任何非ASCII字符]。将
字符串
存储到
对象
会将其转换为
字符串
——一个包含
字符串
类型的单个
最终
字段的类。@brainslaugs83:将
字符串
作为原语可以减少处理字符串时需要操作的对象数量,并允许GC以子字符串感知的方式实现(如果字符串内容存储在GC与“普通”堆一起管理的特殊“仅字符串”堆中)。它还允许
==
+
的方式对字符串内容进行操作。+1-由此推论,字符串不是原语,因为它使其成为原语不会使其更有效。拥有原语类型确实是一个很好的理由!创建一个实例
Integer foo=new Integer(aValueFoo),这肯定比浪费宝贵的秒(大约10秒)节省了时间。在我看来,如果看到
Integer foo Integer foo Integer foo Integer foo Integer foo…
将代码排成一行,那就太麻烦了。整数在处理更大的整数时有它的用途。。。原语是一种祝福!这就是为什么它应该是对象类型(即类)而不是值类型(即结构)——问题是,为什么它不是原语在Java中,所有的原语都是值类型吗?--Java中没有结构吗?对于一个直截了当的问题,唯一合乎逻辑的答案是:因为内存分配问题。int或float类型需要特定的内存大小,但字符串(对不起,字符串)是由未确定(声明时)内存长度组成的可变长度。时期非常感谢你!任何语言都认为它是原始的吗?内存中的固定长度会导致它成为一个吗?奇怪的是,在Javascript中,字符串是基本的。它可以有固定的内存长度,因为它是不可变的。