Разница 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) для распространенных случаев

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

Да, я знаю о методе equals.


person TitaniumDave    schedule 05.07.2020    source источник
comment
У вас там лишняя двойная кавычка.   -  person Dave Doknjas    schedule 06.07.2020
comment
Я предлагаю вам прочитать stackoverflow.com/questions/513832/ - вы не должны сравнивать строки с ==, а использовать метод equals.   -  person john16384    schedule 06.07.2020
comment
Добро пожаловать, Титаниум Дэйв. Моя рекомендация другим #модераторам: этот вопрос действителен, и его следует считать практически дублирующим только в том случае, если вы являетесь экспертом по Java и знаете ответ. Поэтому этот вопрос следует открыть, а ответ должен указывать на соответствующий ответ. В будущем в контексте OP могут быть другие ответы, выходящие далеко за рамки индивидуального метода equals.   -  person Todd    schedule 06.07.2020
comment
Хорошее резюме того, что изменилось в String.replace в Java 9-13: stackoverflow.com/a/58199878/706317   -  person ZhekaKozlov    schedule 06.07.2020
comment
Спасибо @ZhekaKozlov за дополнительный контекст.   -  person TitaniumDave    schedule 07.07.2020
comment
@Тодд Спасибо. Рад, что вы поняли вопрос в дальнейшем.   -  person TitaniumDave    schedule 07.07.2020


Ответы (1)


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

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

person Joni    schedule 05.07.2020