这两条线有什么区别


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

在这种情况下,我们试图在超出界限的字符索引处启动子字符串操作,因此它失败并出现异常。

相关内容

  • 没有找到相关文章

最新更新