首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java字符串类中subSequence和subString方法的区别

java字符串类中subSequence和subString方法的区别
EN

Stack Overflow用户
提问于 2014-10-25 08:05:12
回答 3查看 14.6K关注 0票数 10

对于Java类中的subSequence方法和subString方法之间的区别,我有些困惑。我阅读了已经回答了这个问题的文章What is the difference between String.subString() and String.subSequence(),但我有点困惑,这篇文章提到了"Its只读,意思是您不能在不实例化CharSequence 的新实例的情况下更改CharSequence中的字符“。

但是当我尝试使用下面的示例时

代码语言:javascript
复制
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的区别。

非常感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-25 08:15:22

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

需要理解的是,CharSequence接口String实现 CharSequence

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

代码语言:javascript
复制
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对象上执行String方法,因此将调用String实现,后者只返回一个substring()

代码语言:javascript
复制
public CharSequence subSequence(int beginIndex, int endIndex) {
    return this.substring(beginIndex, endIndex);
}

当人们说substring()subSequence()方法在String上调用时是相同的,这就是他们所谈论的。

关于您发布的代码,由于您是从String开始的,所以对subSequence()的所有调用实际上都是隐藏的substring()调用。因此,每次您试图“更改”您的CharSequence时,编译器实际上只是创建另一个String对象,并向您传递一个对新对象的引用,而不是更改现有对象。

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

票数 18
EN

Stack Overflow用户

发布于 2014-10-25 21:09:46

“它的只读含义是,如果不实例化CharSequence的新实例,就不能更改CharSequence中的字符”。

我认为您混淆的部分原因是您认为您正在用以下代码更改CharSequence中的字符:

代码语言:javascript
复制
CharSequence subSequence = string.subSequence(0, 5);
subSequence = subSequence.subSequence(1, 4);

请注意,第二行创建一个全新的CharSequence对象并覆盖原始对象。它更改原始CharSequence。为了更好地理解这一点,我建议您多读一些关于引用变量的内容。

票数 0
EN

Stack Overflow用户

发布于 2014-10-25 08:09:44

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26560440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档