Разница в Java в String.replace между Java 12 и 13

Я заметил разницу в поведении String.replace(CharSequence, CharSequence) между Java 12 и 13.

java 12 и ранее:

System.out.println("String"=="String".replace("g","g")); //false

java 13 и новее:

System.out.println("String"=="String".replace("g","g")); //true

Установлено, что это, вероятно, связано с:

Оптимизировать String.replace(CharSequence, CharSequence) для общих случаев

Это неожиданное поведение?

Да, я знаю о методе равенства.

1 ответ

Решение

Спецификация API не дает никаких гарантий относительно того, String.replaceвозвращает новый объект String или, если возможно, повторно использует оригинал. Результат сравнения "не указан". Это означает, что он может меняться от одной версии к другой, как вы уже обнаружили.

Используйте метод.equals для сравнения строк на предмет равенства.

Другие вопросы по тегам