据我所知,字符串在Delphi中是不可变的.我明白这意味着如果你这样做:
string1 := 'Hello'; string1 := string1 + " World";
第一个字符串被销毁,您将获得对新字符串“Hello World”的引用.
但是,如果您在代码周围的不同位置使用相同的字符串会发生什么?
我有一个字符串哈希分配用于标识多个变量,因此例如,“更改”由该更改的属性的哈希值标识.这样,我很容易检查“变化”是否平等.
现在,每个哈希都是单独计算的(并不是所有的属性都被考虑在内,因此即使它们在某些值上有所不同,单独的实例也可以相等).
问题是,Delphi如何处理这些字符串?如果我计算将哈希值分离为相同的10个字节长度的字符串,我该怎么办?两个10字节的内存块或两个引用相同的内存块?
澄清:更改由从数据库读取的某些属性组成,并由单个线程生成. TChange类有一个GetHash方法,它根据字符串上的一些值(但不是全部)计算哈希值.现在,其他线程接收更改并且必须将其与先前处理的更改进行比较,以便它们不会处理相同(逻辑)更改.因此,哈希和由于它们具有单独的实例,因此计算出两个不同的字符串.我正在尝试确定从字符串更改为类似128位哈希的内容是否是真正的改进,否则它只会浪费我的时间.
编辑:Delphi的版本是Delphi 7.0