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

时间:2014-10-25 08:05:13

标签: java

我对Java String类中subSequence方法和subString方法之间的区别有点混淆。我读过这篇文章What is the difference between String.subString() and 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);

它打印
埃尔
ELL

我不知道我是否理解正确。你能帮我解释一下吗?请告诉我 subString和subSequence 与示例的区别

非常感谢

3 个答案:

答案 0 :(得分:11)

正如您链接的文章所述,这两种方法之间的唯一区别是返回类型。一个返回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

在这种特殊情况下,由于我们在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

答案 1 :(得分:0)

  

“它的读取只是在不实例化CharSequence的新实例的情况下无法更改CharSequence中的字符”。

我相信你的一部分困惑是,你认为你正在使用以下代码更改CharSequence中的字符:

CharSequence subSequence = string.subSequence(0, 5);
subSequence = subSequence.subSequence(1, 4);

请注意,第二行会创建一个全新的CharSequence对象并覆盖原始对象。 更改原始CharSequence。为了更好地理解这一点,我建议你阅读更多有关参考变量的内容。

答案 2 :(得分:-1)

提示:准备两个示例,一个使用subSequence,另一个使用subString。 每个都会给出一个结果。 尝试修改两个结果并观察会发生什么。

修改是对字符串的任何操作,这将导致不同的字符串,如添加或删除字符或更改字符。