我正在处理这段代码
public class SimpleStringTest {
public static void main(String args[])
{
String ints="123456789";
System.out.println(ints.concat("0").substring(ints.indexOf("2"),ints.indexOf("0")));
}
根据我对java的了解“当多个方法链接在单个代码语句上时,方法从左到右执行”然后,为什么这一段代码抛出StringIndexOutOfBondsException?
提前致谢, GPAR
答案 0 :(得分:4)
因为String
是不可变的。
通过调用concat
,您无法修改ints
,而是创建新的String
。
因此,当您调用ints.indexOf("0")
时,ints
仍然等于其原值,而indexOf
调用返回-1
,而substring
又将成为外边界您的CharSequence
。
尝试使用可变StringBuilder
的反例,例如StringBuilder ints = new StringBuilder("123456789");
System.out.println(ints.append("0").substring(ints.indexOf("2"),ints.indexOf("0")));
:
23456789
<强>输出强>
{{1}}
答案 1 :(得分:2)
因为ints.indexOf("0")
应用于原始字符串ints
(不是您连接的字符串)。
由于没有“0”indexOf("0")
返回-1并且抛出异常。
您的代码与此相同:
String ints="123456789";
int indexOne = ints.indexOf("2");
int indexTwo = ints.indexOf("0");
System.out.println(ints.concat("0").substring(indexOne, indexTwo));