建议您运行在一个IDE和调试 步进入方法串码和您的查询就会回答
检查子串方法的源代码
public String substring(int beginIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
int subLen = value.length - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}
这里:
- 的开始索引为8,
- 8是不小于0
- subLen = 0和不小于0
尝试通过9到子,你会得到
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1875)
at com.iqp.standalone.Sample.main(Sample.java:14)
不,可以在字符串末尾开始子字符串,它只是给你空字符串'“”'(字符串长度为0)。 –
检查[Javadoc](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int))。 –
该文档显示“抛出:IndexOutOfBoundsException” - 如果beginIndex为负数或大于此String对象的长度。“您可以采取这种方式来表示严格较大。 'beginIndex'允许等于length(在你的例子中都是8)。 –