为什么字符串没有基元类型? 为什么当大多数其他数据类型都是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:通过让它保存足以识别可能存储在其他位置的字符序列的信息[可能,但不一定,与其他对象存储在同一堆上]。作为一个简单的变体,让它保存一个
对象
,该对象将包含一个引用achar[]
,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中,字符串是基本的。它可以有固定的内存长度,因为它是不可变的。