Java 字符串a=";“x”;;然后字符串x=a。子字符串(1)为';难道没有像IndexOutfrange这样的错误吗?

Java 字符串a=";“x”;;然后字符串x=a。子字符串(1)为';难道没有像IndexOutfrange这样的错误吗?,java,string,Java,String,我很困惑。我想使用str.substring(1),str必须至少有2个字符,否则应该有绑定的索引。但是当我输入时,Java没有给出任何错误。为什么?阅读Javadoc: 字符串java.lang.String.substring(int beginIndex) 返回作为此字符串的子字符串的字符串。子字符串以指定索引处的字符开头,并延伸到此字符串的结尾 抛出: IndexOutOfBoundsException-如果beginIndex为负值或大于此字符串对象的长度 您的beginIndex等于

我很困惑。我想使用str.substring(1),str必须至少有2个字符,否则应该有绑定的索引。但是当我输入时,Java没有给出任何错误。为什么?

阅读Javadoc:

字符串java.lang.String.substring(int beginIndex)

返回作为此字符串的子字符串的字符串。子字符串以指定索引处的字符开头,并延伸到此字符串的结尾

抛出:

IndexOutOfBoundsException-如果beginIndex为负值或大于此字符串对象的长度

您的
beginIndex
等于
字符串的长度,因此不会引发异常并返回空的
字符串。


为了返回空字符串,索引等于长度是合法的。

显示了这种行为的一个很好的例子:
“空”。子字符串(9)
返回
(空字符串),因为空字符串仍然是字符串。给定
字符串a=“x”,则子字符串(1)
”。
IndexOutOfBoundsException - if beginIndex is negative or larger than the length of this String object.