==
выполняет контрольную проверку равенства, ссылаясь на то, что 2 объекта (строки в этом случае) относятся к одному и тому же объекту в памяти.
Метод equals()
будет проверять, будет ли содержимое или состояния двух объектов одинаковы.
Очевидно, что ==
работает быстрее, но во многих случаях может (может) давать ложные результаты, если вы просто хотите сказать, имеет ли 2 String
s тот же текст.
Определенно рекомендуется использовать метод equals()
.
Не беспокойтесь о производительности. Некоторые способы поощрения использования String.equals()
:
String.equals()
сначала проверяет ссылочное равенство (используя ==
), и если две строки одинаковы по ссылке, дальнейший расчет Выполняется! String.equals()
будет проверять длину строк. Это также является быстрой операцией, поскольку класс String
хранит длину строки, не нужно считать символы или кодовые точки. Если длины отличаются, дальнейшая проверка не выполняется, мы знаем, что они не могут быть равными. Когда все сказано и даже если у нас есть гарантия, что строки являются стажерами, использование метода equals()
все еще не является издержками, которые можно было бы подумать, определенно рекомендуемым способом. Если вам нужна эффективная проверка ссылок, используйте перечисления, где гарантируется спецификацией и реализацией языка, что одно и то же значение перечисления будет одним и тем же объектом (по ссылке).
Кроме того, с формой можно звонить Release
.
Это отправляет сообщение CM_RELEASE в форму. Как реакция это называет Свободным. Преимущество выпуска состоит в том, что нет никаких сообщений, уехал в форму, которая могла привести к катастрофическому отказу.
Можно сделать форму для освобождения, когда она закрывается пользователем или из кода:
procedure TForm27.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm27.FormCreate(Sender: TObject);
begin
Timer1.Enabled := True;
end;
procedure TForm27.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
Close;
end;
Удостоверьтесь, что Вы предоставляете владельца в конструкторе, упаковывают завершения работы приложения, и форма не уничтожается в то время. Владелец освободит форму прежде, чем освободиться.
У меня есть целый комплект объектов, что свободный самих, и я запустил различные тесты на них без показанных проблем/утечек. TForm мог бы быть более сложным, но настолько же долго как Сам. Свободный () выполненный последний вызов, необходимо быть в безопасности.
(Для тех, которые задаются вопросом, с какой стати у меня есть объект что свободный самих; я передаю их вокруг системы много, таким образом, я реализовал собственной схемой подсчета ссылок. Когда последняя ссылка выпущена, таким образом, объект освобождается).