Вопрос:

Почему это не исключение?

java string

57 просмотра

1 ответ

584 Репутация автора

У меня есть следующее выражение:

  String y = new String("a") + "b".substring(1,1) + "c".concat("d").toUpperCase();

Код компилируется и успешно печатает «aCD». У меня вопрос, почему?

Согласно JLS, операнды должны оцениваться слева направо перед вычислением выражения. Это означает, что «b» .substring (1,1) должно генерировать исключение IndexOutOfBoundsException. Вместо этого, кажется, просто отбросить значение.

Что делает Java, что приводит к результату "aCD"?

Обратите внимание - я бы никогда этого не сделал - я просто пытаюсь удовлетворить любопытство.

Автор: kjl Источник Размещён: 22.08.2016 09:21

Ответы (1)


3 плюса

58744 Репутация автора

Это не должно вызывать исключения, потому что:

  1. Начальный индекс не является отрицательным.
  2. Индекс конца не больше, чем длина строки.
  3. Начальный индекс не больше конечного индекса.

Проиллюстрировать

"b" has a length of 1, a begin index of 0.

"b".substring(1,1);
  1. Параметр beginIndex равен «1» и не является отрицательным.
  2. Индекс endIndex "1" не превышает длину строки "1".
  3. Начальный индекс "1" не больше конечного индекса "1".

Я полностью согласен, что этот код глуп, потому что он гарантирует возврат строки ""; однако есть много обстоятельств, когда эти индексы вычисляются, и при некоторых из этих обстоятельств имеет смысл разрешить возврат пустых строк вместо исключений.

Автор: Edwin Buck Размещён: 22.08.2016 09:26
Вопросы из категории :
32x32