Строки в Java неизменяемы. Это означает, что всякий раз, когда вы пытаетесь изменить / изменить строку, вы получаете новый экземпляр. Вы не можете изменить исходную строку. Это сделано для того, чтобы эти экземпляры строк могли кэшироваться. Типичная программа содержит множество ссылок на строки и кеширование этих экземпляров, что может уменьшить объем памяти и увеличить производительность программы.
При использовании оператора == для сравнения строк вы не сравниваете содержимое строки , но фактически сравнивают адрес памяти. Если они равны, в противном случае они вернут true и false. Если значение равно в строке, сравнивает содержимое строки.
Итак, вопрос в том, что все строки кэшируются в системе, как получается ==
возвращает false, тогда как equals возвращает true? Ну, это возможно. Если вы создадите новую строку, например String str = new String("Testing")
, вы создадите новую строку в кеше, даже если в кеше уже содержится строка с тем же содержимым. Короче говоря, "MyString" == new String("MyString")
всегда будет возвращать false.
Java также говорит о функции intern (), которая может использоваться в строке, чтобы сделать ее частью кеша, поэтому "MyString" == new String("MyString").intern()
вернет true.
Примечание: == оператор намного быстрее, чем равен только потому, что вы сравниваете два адреса памяти, но вы должны быть уверены, что код не создает новые экземпляры String в коде. В противном случае вы столкнетесь с ошибками.
Я удивлен, что никто еще не придумал =%
.
Удостоверяются, что Вы имеете :set cindent
,
Место сами на одном из {}
из Вашего блока, и просто совершаете нападки:
=%
Весь код в этом блоке будет правильно форматироваться.
Перейдите к визуальному режиму, выберите к следующей соответствующей скобке, отступу:
V
%
>
В дополнение к какой сказанный skinp, если Вы имеете:
int foo()
{
/* line 1 */
/* line 2 */
/* line 3 */
/* line 4 */
}
и по любой причине хотят, чтобы это было похоже на это (т.е. Вы хотите все, расположил 4 пробелов с отступом* от того, где они были ранее, вместо того, чтобы делать отступ 'правильно' согласно правилам cindent):
int foo()
{
/* line 1 */
/* line 2 */
/* line 3 */
/* line 4 */
}
где угодно в блоке, сделайте viB> (отступ visualselection innerBlock) **
*
или независимо от того, что Ваш shiftwidth установлен по телефону
**
vi}, совпадает с viB и может быть легче помнить, так как vi} выбирает в {}, vi) выбирает в (), vi] выбирает в [], и vi> выбирает в <>.
кроме того, va}, va), и т.д. выбор {}, (), и т.д. в дополнение к тому, что содержится в блоке.
В то время как вставьте: C-d, C-t
, В то время как визуальный:>, <
, В то время как нормальный:>>, < <
В любом этом использовании '.' режимов для расположения с отступом далее.
Если у Вас есть код нес отступом, который похож на это...
if (foo)
{
/* line 1 */
/* line 2 */
/* line 3 */
}
... устанавливают Ваш курсор на "строку 1" в командном режиме и типе 3==
, где 3 количество строк для расположения с отступом.
Я думаю, что это сделает это без любых устанавливаемых переключателей отступа.
:startRange,stopRange s/^/^\t/g
должен добавить пространство вкладки в начале строки между диапазоном номера строки, с которым Вы обеспечиваете
неотступ:
:startRange,stopRange s/^\t/^/g
Попробуйте
: cindent
набора Это включит C делающее отступ волшебство в энергии. Таким образом, как только Вы открываете фигурную скобку, она автоматически снабдит вкладками, пока Вы не закроете фигурную скобку.