C++ 和 Java 中的字符串之间的差异

difference between Strings in C++ and Java

本文关键字:之间 字符串 C++ Java      更新时间:2023-10-16

C++我可以做这样的事情......

String s = "abc";
char c = s[i]; // works fine...

但是在Java,如果我尝试做同样的事情,它会抛出错误。为什么?。

java,要达到上述目的,我必须做到:

s.toCharArray(); 

C++ 中字符串的实现与 Java 中的实现有何不同?

在java中,要实现上述目标,我必须做到: s.toCharArray();

没有。您可以改用charAt

char c = s.charAt(i);

基本上,C++允许用户定义的运算符 - Java没有。因此,String类不会公开任何类型的"索引"运算符;这仅适用于数组,String不是数组。(它通常使用数组实现,但那是另一回事。

编辑:如注释中所述,+运算符对于字符串是特殊情况的 - 就在语言规范中。同样的事情也可以用于[],但事实并非如此 - 并且由于它不在语言规范中,并且Java不支持重载运算符,因此无法在库代码中执行。(例如,不能为任何其他类的+提供自定义行为。

不同之处在于C++具有运算符重载,并使用它来访问字符串内容。

它们

都以您无法更改它们的方式存储字符串字符。

可以写的原因

string s = "abc";
char c = s[i]; 

C++是string类重载了索引运算符(例如 [] 运算符),它允许程序员访问string对象的字符,就像他们访问数组元素一样,尽管string对象不是数组。

另一方面,Java 不允许任何类型的运算符重载(唯一的例外是字符串重载的 + 运算符),因此,索引运算符不是也不能为String对象重载。在 Java 中,要访问字符串的字符,需要使用访问器成员方法,例如 charAt 。您还可以调用 String 类的 toCharArray 方法,该方法将返回字符串对象的字符数组,并且您可以将索引运算符与此返回值一起使用:

char c = s.toCharArray()[i];
参见方法

String#charAt

返回指定索引处的 char 值。索引的范围从 0 到 length() - 1。序列的第一个 char 值位于索引 0 处,下一个位于索引 1 处,依此类推,与数组索引一样。

如果索引指定的 char 值是代理项,则返回代理项值。

public char charAt(int index)

在 C++ 字符串中已经被视为字符数组,但在java中,字符串是一个内置的类。它不同于字符数组。

在C++中,字符串通常只是一个字符数组(或指向字符的指针),以 NULL (\0) 字符结尾。您也可以像处理任何数组一样通过索引来处理字符串。
但是在Java中,字符串不是数组。Java 字符串是 java.lang.String 类型的对象,因此您无法通过索引来处理它们。