C这个字母,有什么特殊含义吗?

2026-05-27 05:461阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1182个文字,预计阅读时间需要5分钟。

C这个字母,有什么特殊含义吗?

刚开始学习,充满期待!

刚开始学习C#的时候,就听说CLR对于String类有一种特别的内存管理机制:有时候,明明声明了两个String类的对象,但是他们偏偏却指向同一个实例。如下:

String s1 = "Hello";
String s2 = "Hello"; //s2和s1的实际值都是“Hello”
bool same = (object) s1 == (object) s2; //这里比较s1、s2是否引用了同一个对象实例
//所以不能写作bool same = s1 == s2;
//因为String类重载了==操作符来比较String对象包含的实际值

这里的same会被赋值为true。也就是说s1真的和s2引用了同一个String对象。当然,应该注意到的是s1和s2都被统一赋值为同一个字符串“Hello”,这才是出现上述情况的原因。

现在我们初步得出结论,当有多个字符串变量包含了同样的字符串实际值时,CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例。(这里我说了“可能”,是因为某些情况下,确实也会发生同一个字符串实际值在内存中有多份副本同时存在。请继续往下看。)

我们知道,String类有很多特别的地方,其中之一就是它是“不会改变的”(immutable)。

阅读全文

本文共计1182个文字,预计阅读时间需要5分钟。

C这个字母,有什么特殊含义吗?

刚开始学习,充满期待!

刚开始学习C#的时候,就听说CLR对于String类有一种特别的内存管理机制:有时候,明明声明了两个String类的对象,但是他们偏偏却指向同一个实例。如下:

String s1 = "Hello";
String s2 = "Hello"; //s2和s1的实际值都是“Hello”
bool same = (object) s1 == (object) s2; //这里比较s1、s2是否引用了同一个对象实例
//所以不能写作bool same = s1 == s2;
//因为String类重载了==操作符来比较String对象包含的实际值

这里的same会被赋值为true。也就是说s1真的和s2引用了同一个String对象。当然,应该注意到的是s1和s2都被统一赋值为同一个字符串“Hello”,这才是出现上述情况的原因。

现在我们初步得出结论,当有多个字符串变量包含了同样的字符串实际值时,CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例。(这里我说了“可能”,是因为某些情况下,确实也会发生同一个字符串实际值在内存中有多份副本同时存在。请继续往下看。)

我们知道,String类有很多特别的地方,其中之一就是它是“不会改变的”(immutable)。

阅读全文