java String类中subSequence和subString方法之间的区别

婚礼

关于Java String类中subSequence方法和subString方法之间的区别,我有些困惑。我读了这篇文章,该文章回答了String.subString()和String.subSequence()什么区别,但我有点困惑,该文章提到“它只能以您无法更改的方式读,而不会实例化CharSequence的新实例

但是当我尝试以下示例时

String string = "Hello";
CharSequence subSequence = string.subSequence(0, 5);
System.out.println(subSequence.subSequence(1, 4));
subSequence = subSequence.subSequence(1, 4);
System.out.println(subSequence);

它打印
ell
ell

我不知道我是否理解正确。您能帮我澄清一下吗,并举例说明subString和subSequence之间的区别。

非常感谢

天蓝色的青蛙

如您所链接的文章中所述,这两种方法之间的唯一区别是返回类型。一个返回a String,另一个返回a CharSequence

需要明白的一点是,CharSequence是一个接口,并且String是一个,其农具 CharSequence

因此,每个String也是一个CharSequence,但反之亦然。您可以将输出分配给substring()类型的变量CharSequence,但不能相反:

String string = "Hello";

String subString1 = string.substring(1,4);             // ell
String subString2 = string.subSequence(1, 4);          // Type mismatch compiler error

CharSequence subSequence1 = string.subSequence(1, 4);  // ell
CharSequence subSequence2 = string.substring(1, 4);    // ell

在这种特殊情况下,由于我们正在subSequence()对一个String对象执行该方法,因此String将调用实现,该实现只返回一个substring()

public CharSequence subSequence(int beginIndex, int endIndex) {
    return this.substring(beginIndex, endIndex);
}

当人们说substring()subSequence()时,当您在上调用它们时,这就是人们在谈论的话题String


关于您发布的代码,由于您以开头String,因此您的所有通话subSequence()实际上只是在substring()幕后进行的通话。因此,每次您尝试“更改”时CharSequence,编译器实际上只是在创建另一个String对象,并向您传递对新对象的引用,而不是更改现有对象。

即使您的变量是类型CharSequence,它所引用的对象实际上还是一个String

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章