Delphi字符串是不可变的吗?

据我所知,字符串在Delphi中是不可变的.我明白这意味着如果你这样做:
string1 := 'Hello';
string1 := string1 + " World";

一个字符串被销毁,您将获得对新字符串“Hello World”的引用.

但是,如果您在代码周围的不同位置使用相同的字符串会发生什么?

我有一个字符串哈希分配用于标识多个变量,因此例如,“更改”由该更改的属性的哈希值标识.这样,我很容易检查“变化”是否平等.

现在,每个哈希都是单独计算的(并不是所有的属性都被考虑在内,因此即使它们在某些值上有所不同,单独的实例也可以相等).

问题是,Delphi如何处理这些字符串?如果我计算将哈希值分离为相同的10个字节长度的字符串,我该怎么办?两个10字节的内存块或两个引用相同的内存块?

澄清:更改由从数据库读取的某些属性组成,并由单个线程生成. TChange类有一个GetHash方法,它根据字符串上的一些值(但不是全部)计算哈希值.现在,其他线程接收更改并且必须将其与先前处理的更改进行比较,以便它们不会处理相同(逻辑)更改.因此,哈希和由于它们具有单独的实例,因此计算出两个不同的字符串.我正在尝试确定从字符串更改为类似128位哈希的内容是否是真正的改进,否则它只会浪费我的时间.

编辑:Delphi的版本是Delphi 7.0

解决方法

Delphi字符串是写入时的副本.如果修改字符串(不使用指针技巧或类似技术来欺骗编译器),则不会影响对同一字符串的其他引用.

Delphi字符串不是实习生.如果从两个单独的代码段创建相同的字符串,它们将不共享相同的后备存储 – 相同的数据将存储两次.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...