char buf [] =“test”是否相当于String buf = new String(“test”)?

时间:2012-08-09 15:32:02

标签: java c

char buf[] = "test";

在C中相当于

String buf = new String("test");
在Java中

而且

char *buf;
buf = "test";

相当于

String buf = "test";

5 个答案:

答案 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对象包装器在内部创建不可变。因此它在上述两种编程语言中具有代表性差异。