java String类中subSequence和subString方法之间的区别
关于Java String类中subSequence方法和subString方法之间的区别,我有点困惑。 我读过这篇文章String.subString()和String.subSequence()之间的区别是什么 ,这个问题得到了回答,但我有点困惑,文章中提到“ 它只读,因为你无法改变CharSequence中的字符,无需实例化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);
它打印
埃尔
埃尔
我不知道我是否理解正确。 能否帮我澄清一下这个问题,请用一个例子告诉我subString和subSequence之间的区别
非常感谢
正如您链接的文章中所解释的那样,这两种方法之间的唯一区别是返回类型。 一个返回一个String
,另一个返回一个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
在这种特殊情况下,由于我们在String
对象上执行subSequence()
方法,因此将调用String
实现, subSequence()
返回一个substring()
:
public CharSequence subSequence(int beginIndex, int endIndex) { return this.substring(beginIndex, endIndex); }
当他们在String
上调用substring()
和subSequence()
方法时,这就是人们在谈论的内容。
关于你发布的代码,既然你开始使用String
,那么你对subSequence()
所有调用实际上都只是subSequence()
substring()
调用。 因此,每次尝试“更改” CharSequence
,编译器实际上只是创建另一个String
对象并向您传递对新对象的引用,而不是更改现有对象。
即使你的变量是CharSequence
类型,它引用的对象实际上也是一个String
。
“它的读取只是在没有实例化CharSequence的新实例的情况下你不能改变CharSequence中的字符”。
我相信你的一部分困惑是你认为你正在使用以下代码更改CharSequence
的字符:
CharSequence subSequence = string.subSequence(0, 5); subSequence = subSequence.subSequence(1, 4);
请注意,第二行创建一个全新的CharSequence
对象并覆盖原始对象。 它不会更改原始的CharSequence
。 为了更好地理解这一点,我建议你阅读更多关于参考变量的内容。
提示:准备两个示例,一个使用subSequence,另一个使用subString。 每个都会给出一个结果。 尝试修改两个结果并观察会发生什么。
修改是对字符串的任何操作,这将导致不同的字符串,如添加或删除字符或更改字符。