C++ 和 Java 中的字符串之间的差异
difference between Strings in C++ and Java
在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
类型的对象,因此您无法通过索引来处理它们。
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 编辑字符串以包含括号 c++ 之间的变量
- 同一分隔符之间的多个子字符串
- 在.cpp文件之间传递全局字符串变量?
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- 两个字符串之间的数学运算
- 在 Rcpp 中的字符串类型之间转换时出错
- 如何排列二进制字符串以最小化它们之间的距离
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)
- 我需要在C++的两个字符串之间找到共同的前缀
- 打印C++中字符出现之间/之后的所有子字符串
- 使用正则表达式c++从单词和分隔符之间的字符串中提取所有子字符串
- C++获取两个分隔符之间的字符串并替换它
- 如何在没有映射的情况下在枚举和字符串之间进行转换?
- 正则表达式匹配字符串之间的数字
- 有序地图字符串搜索与整数搜索之间的时间复杂度
- C++ 复制字符串的指定索引之间的任何子字符串
- 匹配外部单引号之间的字符串