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