我有以下表达式:
String y = new String("a") + "b".substring(1,1) + "c".concat("d").toUpperCase();
代码编译,并成功打印" aCD"。我的问题是,为什么?
根据JLS,在评估表达式之前,应该从左到右评估操作数。这意味着" b" .substring(1,1)应抛出IndexOutOfBoundsException。相反,它似乎只是抛弃了价值。
Java正在做什么导致" aCD"?
的结果注意 - 我实际上永远不会这样做 - 我只是想满足好奇心。
答案 0 :(得分:3)
它不应该抛出异常,因为:
说明
"b" has a length of 1, a begin index of 0.
"b".substring(1,1);
我完全同意这段代码很愚蠢,因为它保证了字符串的返回"&#34 ;;但是,在很多情况下会计算这些索引,在某些情况下,允许返回空字符串而不是异常是很有意义的。