微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Delphi字符串是不可变的吗?

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

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

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

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

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

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

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

编辑:Delphi的版本是Delphi 7.0

解决方法

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

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

原文地址:https://www.jb51.cc/delphi/101694.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐