procedure TForm4.FormCreate(Sender: TObject);
var
a, b: string;
begin
a := 'Test';
b := a;
ShowMessage(BoolToStr(pointer(a) = pointer(b), true));
end;
Результат - True
, поэтому да, a
и b
указывают на одни и те же данные.
Однако обратите внимание, что отображается
procedure TForm4.FormCreate(Sender: TObject);
var
a, b: string;
begin
a := 'Test';
b := a;
b := 'Test2';
ShowMessage(BoolToStr(pointer(a) = pointer(b), true));
end;
False
, как и должно быть.
Кроме того, обратите внимание, что
procedure TForm4.FormCreate(Sender: TObject);
var
a, b: string;
begin
a := 'Test';
b := a;
ShowMessage(BoolToStr(@a = @b, true));
end;
также отображает False
, поскольку a
и b
отличаются строковые (указатель) переменные, поэтому в некотором месте в памяти (@a
) находится адрес данных a
, а где-то еще (@b
) - адрес данных b
.Первый пример показывает, что эти два места в памяти содержат один и тот же адрес, то есть a
и b
содержат одинаковые данные.