【发布时间】:2016-02-06 11:06:46
【问题描述】:
长话短说,为什么 Java 不为这行代码抛出 IndexOutOfBoundsException?
str.substring(str.length())
仅仅是IndexOutOfBoundsException的定义吗?为了编程方便/对称,使开始/结束索引采用相同范围的值?这只是甲骨文的决定吗?是否只有一个特殊情况可以使用包含起始索引来处理这种情况?还是有什么深层次的原因……
我阅读了文档,他们说它只返回空字符串 ("")。但我想知道这是否值得担心。它会改变吗?我想不,但我想听听别人的意见。我有一些代码依赖于这样的行来工作,因为我使用 substring 和 indexOf(...)+1 来拆分一些行,我真的不想在代码行周围放置不必要的逻辑。
【问题讨论】:
-
好吧,Oracle 无缘无故地破坏向后兼容性将是一个相当大的决定,所以我认为你是安全的。
-
为什么会该代码抛出
IndexOutOfBoundsException?它的行为得到了很好的定义,并且有据可查(作为返回对空String的引用)。 Java 在维护兼容性方面有着良好的记录,在这里进行更改没有任何好处。我相信您可以信赖这种行为。 -
也与
List.subList一致,例如docs.oracle.com/javase/7/docs/api/java/util/…