是
char buf[] = "test";
在C中相当于
String buf = new String("test");
在Java中?
而且
char *buf;
buf = "test";
相当于
String buf = "test";
答案 0 :(得分:9)
很难说他们是等同于,虽然我明白你在驾驶什么。
您的C版本是一系列8位字符。 Java变体是支持Unicode的。
其次,在Java中,您创建的是一个具有行为的对象,而不仅仅是一系列字符。
最后,Java变体是 immutable 。您可以更改引用,但不能更改基础字符集(这是由String
对象包装的函数)
对于大致相当的东西,你可以在Java中使用一个字节数组。但请注意,这不会以空值终止。 Java数组知道它们的长度而不是使用null终止约定。或者,更接近C ++的等价物可能是std::string
答案 1 :(得分:1)
前两个不等同。在Java中,String对象除了存储char数组外,还包含其他内容(例如长度字段)。当然,java版本更多是OO。
第二个与上述观察结果相同。它们都是指向字符容器的指针。 c容器是一个简单的char数组,而字符串是一个完整的对象。
答案 2 :(得分:1)
这个问题无法真正回答 - 你将苹果与橙子进行比较。
在C中,“字符串”实际上只是一个char
数组,它以空终止(即最后的'\0'
字节,由编译器放置,并由str__()
库函数。
在Java中,String
是一个对象,它包含(可能包含其他内容),一个字符数组和一个整数计数。
它们是不同的东西,它们的使用方式不同。您是否正在尝试完成并遇到问题?如果是这样,请询问 ,我们将尝试回答。否则,这不是一个真正有效的问题,IMO。
答案 3 :(得分:0)
没有。这些是不同的数据类型。 char buf[]
是一个数组,String buf
是一个对象。 String buf
将动态调整大小,并提供大量有用的方法。 char buf[]
是一个静态大小的内存块,包含5个8位字符。
答案 4 :(得分:0)
下面将创建一个字符数组
char buf[] = "test";
String buf = new String("test");
将导致创建String Object
,但在其内部使用char[]
本身,使用String对象包装器在内部创建不可变。因此它在上述两种编程语言中具有代表性差异。