我知道C字符串abc
在C内部是abc\0
,与Java的情况是一样的吗?
答案 0 :(得分:11)
不,它在Java中不一样。没有空终止符。 Java字符串是对象,而不是指向字符数组。它保持长度以及Unicode字符,因此不需要查找空终止符。
您不必在此处询问:查看JDK附带的src.zip中String.java的源代码。这是它的开始:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
{
/** The value is used for character storage. */
private final char value[];
/** The offset is the first index of the storage that is used. */
private final int offset;
/** The count is the number of characters in the String. */
private final int count;
/** Cache the hash code for the string */
private int hash; // Default to 0
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = -6849794470754667710L;
}
答案 1 :(得分:7)
不,C字符串是一个字符数组,因此没有与它们相关的长度。这个决定的副作用是要确定一个字符串的长度,必须遍历它才能找到\0
,这不能有效地传递长度。
Java字符串为其字符设置了char数组,并带有偏移长度和字符串长度。这意味着确定字符串的长度非常有效。
答案 2 :(得分:2)
C语言中的字符串是char类型的数组,在Java中它是一个类,它表示unicode chars的集合。
答案 3 :(得分:2)
没有。在C中使用空终止符,因为它比传递指针和大小更容易。在Java中,大小始终是已知的,因此不需要空终止符。此外,Java中没有终止字符(放入\0
将成为文字字符串的一部分。)
答案 4 :(得分:2)
Java字符串不像C字符串那样以空字符结尾。这是因为Java存储字符串&#39;长度。您可以使用String.length()
检索长度。
答案 5 :(得分:1)
类String
在Java中实现。有关示例,请参阅OpenJDK的implementation。
OpenJDK 7 String
类带有一个类型为char[]
的数组来保存字符串本身,以及一个偏移量(告诉char[]
中的第一个使用位置),长度字符串,以及字符串的哈希码。
它还有两个静态字段,一个用于序列化的版本ID和一个ObjectStreamField[]
,因为序列化输出流的特殊外壳(至少在OpenJDK 7中)。
答案 6 :(得分:0)
据我所知,在java中,String作为Object的子类存储为堆的一个对象。无需使用'\ 0'来仅指定字符或字符串。