0

char buf[] = "test";

在 C 中相当于

String buf = new String("test");

在 Java 中?

并且是

char *buf;
buf = "test";

相当于

String buf = "test";

?

4

5 回答 5

9

很难说它们是等价的,尽管我明白你在说什么。

您的 C 版本是一个 8 位字符序列。Java 变体支持 Unicode。

其次,在 Java 中,您正在创建一个具有行为的对象,而不仅仅是一个字符序列。

最后,Java 变体是不可变的。您可以更改引用,但不能更改底层字符集(这是被String对象包装的功能)

对于基本等效的东西,您可以在 Java 中使用字节数组。但是请注意,这不会以空值结尾。Java 数组知道它们的长度,而不是使用空终止的约定。或者,更接近的 C++ 等价物可能是std::string

于 2012-08-09T15:34:42.173 回答
1

前两个不等价。在Java 中,String 对象除了存储一个char 数组外,还包含其他内容(例如长度字段)。java版本当然更OO。

第二个与上述相同的观察等效。它们都是指向字符容器的指针。c 容器是一个简单的字符数组,而字符串是一个成熟的对象。

于 2012-08-09T15:34:14.473 回答
1

这个问题无法真正回答——你正在将苹果与橙子进行比较。

在 C 中,“字符串”实际上只是一个char以空值结尾的数组(即'\0'末尾的一个字节,由编译器放置,并由str__()库函数预期。

在 Java 中,String是一个对象,它包含(可能除其他外)一个字符数组和一个整数计数。

它们是不同的东西,它们的用途也不同。您是否正在尝试完成某些特定的事情并且遇到了麻烦?如果是这样,问那个,我们会尽力回答。否则,这不是一个真正有效的问题,IMO。

于 2012-08-09T15:37:33.007 回答
0

不,这些是不同的数据类型。char buf[]是一个数组,String buf也是一个对象。它将是动态大小的String buf,并且有很多有用的方法。char buf[]是一个静态大小的内存块,包含 5 个 8 位字符。

于 2012-08-09T15:35:36.497 回答
0

下面将创建一个字符数组

char buf[] = "test";  

asString buf = new String("test");将导致创建 a String Object,但在内部它char[]本身使用 String 对象包装器在内部变得不可变。所以这是上述两种编程语言的表示差异。

于 2012-08-09T15:37:39.783 回答