我知道Java中的字符串不像int或float那样是普通变量,而是对象。但我的问题是为什么需要这样做?为什么字符串不能像字符序列一样成为普通变量?是什么原因促使Java设计者将字符串定义为对象?
null
值Collection
中Object
一起具有泛型和多态的强大功能,与其他对象一样使用String
类的所有精彩方法String
和其他原始类型(例如int)的值需要根据字符串长度变化来使用可变内存。这使得将它们保存在堆栈上变得困难。s1 + s2
和字符串字面量"abc"
,这使它与任何其他对象不同。s="a"; s="abc"
。你会为 s
分配多少内存?而字符数组也不在堆栈上。 - Henrys
不是一个对象,而是一个指向对象的引用!因此,您可以更改它并使其指向一个新的字符串对象 abc
。但是我同意您关于内存分配的观点,因此在使用 char 数组时,在 C++ 中所做的工作是具有 MAX 固定大小,并使用 \0
来查找 char 数组的实际大小,如果您想要在堆栈上使用它们或者您想要动态分配,则需要选择堆。 - AllanString
的变量可以更改(无论它是否包含对字符串对象或假设的原始字符串值的引用)。但我认为我们的意思是一样的。 - Henry
String
包含关于其状态的信息,并将方法组合在一起,例如String.length
、String.contains
、String.hashCode
等等。值得注意的是,你也可以使用字符数组,但会失去许多String
的实用功能。 - GeorgeString
,以便进行内存优化,同时通过String
对象是不可变/不变的方式进行性能优化。 - George