在Java中,String是char数组吗?

8
我想知道一个字符串是否是集合。我已经阅读了相关资料,但仍感到困惑。

4
不是的。字符串是String类的一个对象,它具有数组字符作为其实例成员之一,但还有更多其他内容。 - Taylor
7个回答

10

字符串是表示字符序列的不可变对象(String实现了CharSequence接口)。

与char数组和char集合的主要区别在于:字符串不能被修改,无法添加/删除/替换字符(忽略反射操作)。

它们在内部由字符数组偏移量长度组成(这允许创建轻量级子字符串,使用相同的字符数组)。

例如:['F','o','o','H','e','l','l','o',' ','W','o','r','l','d'], 偏移量=3,字符数=5,对应的子字符串为"Hello"


4

字符串是String类的对象,它不是一个Collection。它是基于字符数组实现的。您可以在下面的代码片段中看到:

public final class String implements 
        java.io.Serializable, Comparable<String>, CharSequence
    {           
    private final char value[];

3
不,它不是一个集合,因为它没有实现Collection<E>接口。
从概念上讲,它是一个不可变的字符序列(并实现CharSequence接口)。
在内部,String类可能会使用字符数组,尽管我很确定规范没有强制要求这样做。

1

不,它不是一个数组或集合。然而,如果你需要一个字符数组并且有一个字符串,有一个方便的方法,即String.toCharArray(); 你可以像这样使用它。

    // Prints the String "Hello, World!" as a char[].
    System.out.println(Arrays.toString("Hello, World!".toCharArray()));

1

不,一个字符串是一个String类的对象。

String类代表字符字符串。Java程序中所有的字符串字面量,比如"abc",都是该类的实例....

一个String对象使用UTF-16格式表示一个字符串,其中补充字符由代理对表示(有关更多信息,请参见Character类中的Unicode字符表示部分)。索引值指向char代码单元,所以一个补充字符在一个String中使用两个位置。


1

String类只是一个允许你创建字符串对象的类。像所有类一样,它通过自己的方法使得使用这些对象更加容易。

字符数组是一个字符串,但它的方法与数组或数组元素有关。

例如,如果你想要在一个String类的字符串中查找字符的位置,那么你可以使用一个叫做IndexOf的方法。但是,如果你想在一个字符数组中查找字符,那么你就必须手动使用循环来完成。


1
不,一个“String”是由字符组成的不可变字符串,该类直接扩展“Object”,并且没有实现任何“Collection”接口。那就是基本答案。
但是,在运行时有很多复杂的事情发生——JVM中有一整个缓存的字符串集合,最原始的表示形式,确实,“String”基本上是一个指向字符表示的内存地址数组(这意味着它是一堆内存地址,这些地址指向表示字符的对象)。尽管如此,一旦你超越了“String”被定义为类的定义,你可以一直继续,直到你只谈论组合的1和0。
我猜想您提出了这个问题,因为您正在学习这个,并且教师说过“String”是字符数组的某种形式。虽然从技术上讲是正确的,但这真的很令人困惑,因为这两个概念存在于完全不同的抽象层面。

不,我正在编写一些软件,突然感到有点慌,因为我实际上并不知道它是如何设置的。 - juju
哈哈,我懂你的感受。其实我很喜欢你问这个问题的原因,就是因为你想知道它是如何工作的 :-) - Ickster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接