String s = "coding";
System.out.println(s.substring(6)); // Line 1
System.out.println(s.charAt(6)); // Line 2
为什么第1行打印空字符串而不像第2行那样抛出错误(索引越界(,反之亦然?
对s.substring(6)
的调用从字符串输入coding
的最后开始,因此是合法的,但只返回一个空字符串作为结果。然而,s.charAt(6)
试图引用字符串输入的字符索引越界:
[c,o,d,i,n,g]
0,1,2,3,4,5 6 <-- 6 is out of bounds
请注意,以下调用确实会生成StringIndexOutOfBoundsException
:
System.out.println(s.substring(7)); // throws an exception
在这种情况下,我们试图在超出界限的字符索引处启动子字符串操作,因此它失败并出现异常。