我是一名刚从C++转到Java的学生。
在Java中,为什么要定义单独的字符串和字符数组数据类型?它们之间有什么区别?
由于我只学过C++,所以一直以来我认为它们是同一种东西。如果可能的话,请澄清一下。
我是一名刚从C++转到Java的学生。
在Java中,为什么要定义单独的字符串和字符数组数据类型?它们之间有什么区别?
由于我只学过C++,所以一直以来我认为它们是同一种东西。如果可能的话,请澄清一下。
String
是不可变的,而Char
数组则不是。字符串是由一个字符数组实现的,但每次你试图修改它(例如通过拼接、替换等操作),它都会给你一个新的String
对象。
因此,String
行为类似于常量Char
数组,但还带有特定的语法糖,使它们非常易于使用。例如,加号+
运算符被重载为字符串拼接运算符。
String
,因为计算机系统与人类交互的内在需求。Java的设计者们认识到这一点,并将char[]封装成一个称为String的特殊对象,以使与字符串的交互更加方便。 - StormeHawkestring.charAt(index)
。对于第二个情况,您需要使用子字符串进行操作,或者使用string.toCharArray()
并进行处理。有关您可以使用String
进行哪些操作的更多详细信息,我建议查看此处的String
javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html - StormeHawkeString
是一个基本的系统类,它本质上包装了一个char[]
。有几个原因,使得在大多数情况下使用完整的类比直接处理数组更为可取:
String
是不可变的;一旦你有了对某个String
的引用,你就知道它永远不会改变。String
提供了一些有用的方法,裸数组无法提供,例如length()
,并且具有清晰定义的比较语义。+
)而有一个特殊的例外规则,称之为“无运算符重载”。从本质上讲,使用类将所需的行为和数据结构收集到同一位置是良好的面向对象编程实践,并且String
包装了一个字符数组,并提供了你想要在字符串上执行的有用操作。
String
是不可变的,意味着创建后不能修改。charAt
将提供对后备数组中单个字符的只读访问。StringBuilder
(以及早期、较慢的 StringBuffer
)围绕一个 char[]
提供了读写语义,可以在构建完成后转换为只读 String
。 - chrylis -cautiouslyoptimistic-存在语义差异。仅因为数据以相同方式存储,并不意味着它是相同的内容。日期和金额也可能具有相同的内部表示方式(时间戳或固定点现金金额的long
),但它们并不相同。该char
数组同样可以表示16位图像。
在面向对象编程中,按照对象的实际属性建模是最佳实践,并且不应该根据对象内部数据存储方式进行建模。这样可以允许您对数据进行封装(使用getter/setter限制或控制访问权限,甚至使内部表现形式不可变或可池化),并为对象提供适当的方法。
intern()
方法创建的字符串和一些其他情况下的字符串才会存储在池中。此外,存储在池中的字符串不会进行垃圾回收。 - RadiodefstringExample1.equals(stringExample2);
String stringExample3 = stringExample1.replace(substring1, substring2);