如何在Java内部表示字符串?

时间:2011-12-16 02:13:00

标签: java string

我知道C字符串abc在C内部是abc\0,与Java的情况是一样的吗?

7 个答案:

答案 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数组,并带有偏移长度和字符串长度。这意味着确定字符串的长度非常有效。

Source

答案 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'来仅指定字符或字符串。