多个字符串变量真的可以引用相同的数据吗?

Pau*_*aul 4 delphi string reference-counting

根据互联网上的信息,我发现两个跟随变量指向内存中的相同位置.

任何人都可以提出一个代码示例来证明实际上它是真的(例如,通过更改第一个变量中的一个字母并看到这个变化在第二个变量中可见)?

procedure TForm1.Button1Click(Sender: TObject);
var
  a, b: String;
begin
  a := 'Test';
  b := a;

  showmessage (a);
  showmessage (b);
end;
Run Code Online (Sandbox Code Playgroud)

And*_*and 8

procedure TForm4.FormCreate(Sender: TObject);
var
  a, b: string;
begin
  a := 'Test';
  b := a;
  ShowMessage(BoolToStr(pointer(a) = pointer(b), true));
end;
Run Code Online (Sandbox Code Playgroud)

结果是True,是的,ab指向相同的数据.

但请注意

procedure TForm4.FormCreate(Sender: TObject);
var
  a, b: string;
begin
  a := 'Test';
  b := a;
  b := 'Test2';
  ShowMessage(BoolToStr(pointer(a) = pointer(b), true));
end;
Run Code Online (Sandbox Code Playgroud)

显示False,应该是.

另外,请注意

procedure TForm4.FormCreate(Sender: TObject);
var
  a, b: string;
begin
  a := 'Test';
  b := a;
  ShowMessage(BoolToStr(@a = @b, true));
end;
Run Code Online (Sandbox Code Playgroud)

还显示False,因为a并且b不同的字符串(指针)变量,所以在memory(@a)中的某些地方是数据的地址a,而其他地方(@b)是数据的地址b.第一个例子示出了在存储器这两个地方包含相同的地址,即,ab包含相同的数据.