关于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] 删除。
我来说两句