==
сравнивает ссылки на объекты.
.equals()
сравнивает значения String.
Иногда ==
дает иллюзии сравнения значений String, как в следующих случаях:
String a="Test";
String b="Test";
if(a==b) ===> true
Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:
(a == b) ===> true
String Pool
b -----------------> "test" <-----------------a
Однако ==
не выполняется в следующем случае:
String a="test";
String b=new String("test");
if (a==b) ===> false
В этом случае для new String("test")
оператор new String будет создан в куче, и эта ссылка будет указана на b
, поэтому b
будет дана ссылка на кучу, а не на String pool.
Теперь a
указывает на String в пуле String, а b
указывает на String в куче. Из-за этого мы получаем:
, если (a == b) ===> false.
String Pool
"test" <-------------------- a
Heap
"test" <-------------------- b
Пока .equals()
всегда сравнивает значение String, поэтому дает true в обоих случаях:
String a="Test";
String b="Test";
if(a.equals(b)) ===> true
String a="test";
String b=new String("test");
if(a.equals(b)) ===> true
Таким образом, использование .equals()
всегда лучше.
Есть несколько полезных встроенных команд, которые дают определенный контроль, но он не полный. Основные из них:
Ctrl-W, r (т.е. удерживайте CTRL, нажмите W, отпустите CTRL, нажмите r) - это поворачивает окна (первое окно становится вторым, второе - третьим и т.д.). )
Ctrl-W, x - поменяйте текущее окно на следующее
Ctrl-W, Shift-H - переместите это окно в крайнее левое
Ctrl-W, Shift-K - переместите это окно вверх
(и аналогично для Ctrl-W, Shift-J and Ctrl-W, Shift-L). См.:
:help window-moving
--L)).
Я написал и использовал следующий фрагмент кода в моем vimrc для {{ 1}} копирование и вставка моих окон Vim.
Это определяет, например, следующие сочетания клавиш:
y
: «Дергает окно», т.е. сохраняет номер буфера в текущем окне
в глобальной переменной. pp
: «Помещает окно на место текущего окна», т.е.он считывает номер буфера
, сохраненный ранее, и открывает этот буфер в текущем окне.
Он также сохраняет номер буфера, который раньше находился в текущем окне
. Если под «заменой этих окон местами» вы имеете в виду «открытие буфера в окне A в окне B, и наоборот, без изменения положения окон », вы можно использовать следующую последовательность клавиатуры для переключения окон:
y
(восстановление номера буфера) pp
(вставка буфера) pp
(снова вставьте буфер) Работает только в Vim> = 7.0.
if version >= 700
function! HOpen(dir,what_to_open)
let [type,name] = a:what_to_open
if a:dir=='left' || a:dir=='right'
vsplit
elseif a:dir=='up' || a:dir=='down'
split
end
if a:dir=='down' || a:dir=='right'
exec "normal! \<c-w>\<c-w>"
end
if type=='buffer'
exec 'buffer '.name
else
exec 'edit '.name
end
endfunction
function! HYankWindow()
let g:window = winnr()
let g:buffer = bufnr('%')
let g:bufhidden = &bufhidden
endfunction
function! HDeleteWindow()
call HYankWindow()
set bufhidden=hide
close
endfunction
function! HPasteWindow(direction)
let old_buffer = bufnr('%')
call HOpen(a:direction,['buffer',g:buffer])
let g:buffer = old_buffer
let &bufhidden = g:bufhidden
endfunction
noremap <c-w>d :call HDeleteWindow()<cr>
noremap <c-w>y :call HYankWindow()<cr>
noremap <c-w>p<up> :call HPasteWindow('up')<cr>
noremap <c-w>p<down> :call HPasteWindow('down')<cr>
noremap <c-w>p<left> :call HPasteWindow('left')<cr>
noremap <c-w>p<right> :call HPasteWindow('right')<cr>
noremap <c-w>pk :call HPasteWindow('up')<cr>
noremap <c-w>pj :call HPasteWindow('down')<cr>
noremap <c-w>ph :call HPasteWindow('left')<cr>
noremap <c-w>pl :call HPasteWindow('right')<cr>
noremap <c-w>pp :call HPasteWindow('here')<cr>
noremap <c-w>P :call HPasteWindow('here')<cr>
endif