Почему IntelliJ хочет, чтобы я это изменил? - PullRequest
2 голосов
/ 04 марта 2020

Простая строка кода:

String thing = "Something";
thing += " something else" + " and more.";

IntelliJ IDEA предлагает изменить эту строку на 4 других способа достижения sh того же результата:

String.format()
StringBuilder.append()
java.text.MessageFormat.format()
Replace += with =

Почему? Что не так с + =? Кто-нибудь может объяснить это, пожалуйста? Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 марта 2020

Я предполагаю, что вы имеете в виду следующее:

enter image description here

Это на самом деле не является "проблемой" вашего кода, как указано в значок карандаша. Исправления проблем с вашим кодом обозначены с помощью лампочки, например, не используется значение thing:

enter image description here

Карандаш просто означает «вот ярлык для изменения кода, так что вам не нужно менять его вручную ". Изменение a += b на a = a + b обычно не так уж много работы, но другие вещи, такие как замена для каждого l oop на обычное для l oop, это.

enter image description here

Это может быть полезно, если вы вдруг вспомнили, что для чего-то нужен индекс массива.

1 голос
/ 04 марта 2020

В общем случае результат не совпадает. Оператор + выделяет промежуточную строку, которая требует дополнительной памяти.

String thing = "Something";
thing += " something else" + " and more."; // two allocations: to compute string inside expression ```" something else" + " and more."```` and to execute ```+=```

Используя StringBuilder, вы не выделяете промежуточный результат, например, требуется меньше памяти.

В вашем случае с короткими линиями и без петель фактического повышения производительности не ожидается. Однако с циклами вы получаете O(N^2) сложность. Пожалуйста, проверьте этот ответ с объясненным примером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...