Zitat:
Delphi-Quellcode:
var
A,B : AnsiString;
begin
A := 'Cool';
B := A;
A := 'UnCool';
Writeln(B); //Cool
end;
Zuweisungen auf den kompleten Inhalt sind etwas Anderes.
Das funktioniert auch bei (einfachen) dynamischen Arrays ordnungsgemäß.
Delphi-Quellcode:
var
A, B: array ob Byte;
SetLength(A, 3);
A[0] := 123;
A[1] := 456;
A[2] := 798;
B := A;
SetLength(B, 3); // SetLength oder Copy macht B unique und A wird nicht mehr verändert
B[0] := 111;
B[1] := 963;
B[2] := 111;
ShowMessage(IntToStr(A[1])); // 456
ShowMessage(IntToStr(B[1])); // 963
Aber zugriffe auf den Inhalt funktionieren eben nicht richtig ... jedenfalls nicht so, wie man es sich denken würde.
Delphi-Quellcode:
var
A, B: array ob Byte;
SetLength(A, 3);
A[0] := 132;
A[1] := 456;
A[2] := 798;
B := A;
B[1] := 963;
ShowMessage(IntToStr(A[1])); // hier würde man ja 456 erwarten, aber erhält 963
ShowMessage(IntToStr(B[1])); // 963
Und hier das selbe Beispiel, nur eben mit einem String.
Delphi-Quellcode:
var
A, B: string;
A := 'abc';
B := A;
B[2] := 'x';
ShowMessage(A[2] + ' - ' + A); // b - abc
ShowMessage(B[2] + ' - ' + B); // x - axc