C ++和Java中的字符串之间的区别

时间:2013-09-19 07:01:36

标签: java c++ string

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

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

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

java中,要实现上述目标,我必须这样做:

s.toCharArray(); 

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

6 个答案:

答案 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对象不是数组。

另一方面,Java不允许任何类型的运算符重载(唯一的例外是为字符串重载的+运算符)因此,索引运算符不会也不能重载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)

c ++字符串中的

已被视为字符数组, 但在java中String是一个内置类。 它与字符数组不同。

答案 5 :(得分:0)

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