在C++
我可以做这样的事情......
String s = "abc";
char c = s[i]; // works fine...
但是在Java
中,如果我尝试做同样的事情,它会抛出一个错误。为什么呢?
在java
中,要实现上述目标,我必须这样做:
s.toCharArray();
C++
中字符串的实现与Java中的字符串的实现有何不同?
答案 0 :(得分:17)
在java中,要实现上述目标,我必须这样做: s.toCharArray();
不是真的。您可以改为使用charAt
:
char c = s.charAt(i);
基本上,C ++允许用户定义的运算符 - Java不允许。所以String
类不会暴露任何类型的“索引”运算符;数组只存在 ,而String
不是数组。 (它通常使用数组实现,但这是另一回事。)
编辑:正如评论中所述,+
运算符是特殊的字符串 - 正好在语言规范中。同样的可以为[]
完成,但它不是 - 并且由于它不在语言规范中,并且Java不支持重载运算符,因此无法执行在库代码中。 (例如,您不能为任何其他类的+
提供自定义行为。)
答案 1 :(得分:3)
不同之处在于C ++有运算符重载,并使用它来访问字符串内容。
它们都以不能更改它们的方式存储字符串字符。
答案 2 :(得分:2)
可以写
的原因string s = "abc";
char c = s[i];
C ++中的是string
类重载了索引操作符(比如[]操作符),它允许程序员访问string
对象的字符,就像它们访问数组元素一样尽管string
对象不是数组。
+
运算符)因此,索引运算符不会也不能重载String
个对象。在Java中,要访问字符串的字符,您需要使用访问者成员方法,例如charAt
。您还可以调用toCharArray
类的String
方法,该方法返回字符串对象的字符数组,并且可以使用索引运算符和返回值:
char c = s.toCharArray()[i];
答案 3 :(得分:1)
请参阅方法String#charAt
返回指定索引处的char值。索引的范围从0到length() - 1.序列的第一个char值在索引0处,下一个在索引1处,依此类推,就像数组索引一样。
如果索引指定的char值是代理项,则返回代理值。
public char charAt(int index)
答案 4 :(得分:1)
已被视为字符数组, 但在java中String是一个内置类。 它与字符数组不同。
答案 5 :(得分:0)
在C ++中,字符串通常只是一个字符数组(或指向字符的指针),以NULL(\ 0)字符结尾。您也可以通过索引处理字符串,就像处理任何数组一样
但在Java中,字符串不是数组。 Java字符串是java.lang.String
类型的对象,因此您无法通过索引处理它们。