加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi字符串是不可变的吗?

发布时间:2020-12-15 04:21:20 所属栏目:大数据 来源:网络整理
导读:据我所知,字符串在Delphi中是不可变的.我明白这意味着如果你这样做: string1 := 'Hello';string1 := string1 + " World"; 第一个字符串被销毁,您将获得对新字符串“Hello World”的引用. 但是,如果您在代码周围的不同位置使用相同的字符串会发生什么? 我有
据我所知,字符串在Delphi中是不可变的.我明白这意味着如果你这样做:
string1 := 'Hello';
string1 := string1 + " World";

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

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

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

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

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

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

编辑:Delphi的版本是Delphi 7.0

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读