譬如有两个 TStringList 对象: List1 和 List2;
List2.Assign(List1) 就是把 List1 的内容复制给 List2;
List2 := List1 相当于给 List1 再取一个名字.
举例:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var List1,List2: TStringList; begin List1 := TStringList.Create; List2 := TStringList.Create; List1.CommaText := 'AAA,BBB,CCC'; List2.Assign(List1); {此时 List1、List2 分别指向了不同的对象} ShowMessageFmt('%s, %p', [List1[0], Pointer(List1)]); { AAA, 00ABAA40 } ShowMessageFmt('%s, %p', [List2[0], Pointer(List2)]); { AAA, 00ABAA90 } List1.Free; ShowMessage(List2[1]); {List1 释放后, List2 还会存在.} List2.Free; end; procedure TForm1.Button2Click(Sender: TObject); var List1,List2: TStringList; begin List1 := TStringList.Create; List1.CommaText := 'AAA,BBB,CCC'; List2 := List1; {此时 List1、List2 指向了同一个对象} ShowMessageFmt('%s, %p', [List1[0], Pointer(List1)]); { AAA, 00ABAA40 } ShowMessageFmt('%s, %p', [List2[0], Pointer(List2)]); { AAA, 00ABAA40 } List1.Free; {此时 List1、List2 指向的对象释放了} //ShowMessage(List2[1]); {所以这句会出错} end; end.