字符串内存驻留机制详解示例

时间:2023-09-24 04:09:32 


//字符串的内存驻留机制
        public static void Test()
        {
            //当有多个字符串变量包含了同样的字符串实际值时,
            //CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例。

            String s1 = "Hello";
            String s2 = "Hello";
            bool same = (object)s1 == (object)s2;//比较一下s1和s2是否是同一个引用
            Console.WriteLine(same);             //这个地方为true:表示同一个引用 没有开辟新的内存空间

            /*
             * 我们知道,String类有很多特别的地方,其中之一就是它是“不会改变的”(immutable)。
             * 这说明在我们每次对一个String对象进行操作时(比如说使用Trim,Replace等方法),
             * 并不是真的对这个String对象的实例进行修改,而是返回一个新的String对象实例作为操作执行的结果。
             * String对象的实例一经生成,到死都不会被改变了!
             */

            /*关于驻留池:它是维护哪些字面量的字符串,但是不会维护下面的这种类型*/
            StringBuilder sb = new StringBuilder();
            sb.Append("Hel").Append("lo");
            String s3 = "Hello";
            String s4 = sb.ToString(); //虽然值相同但并不是同一个引用

            bool same2 = ((object)s4 == (object)s3);
            Console.WriteLine(same2);

            /*让编程者能够强制CLR检查驻留池;查看是否有相同的字符串*/

            StringBuilder sb2 = new StringBuilder();
            sb2.Append("He").Append("llo");
            string s5 = "Hello";
            string s6 = String.Intern(sb2.ToString());

            bool same3 = (object)s5 == (object)s6;
            Console.WriteLine(same3);
        }

标签:内存驻留
0
投稿

猜你喜欢

  • Android实现Activity界面切换添加动画特效的方法

    2021-07-11 08:02:35
  • Java调用Shell命令和脚本的实现

    2023-11-29 00:59:09
  • Spring Batch入门教程篇

    2022-02-15 01:53:01
  • java递归设置层级菜单的实现

    2023-03-05 14:14:57
  • 图文详解Java中的字节输入与输出流

    2022-12-23 23:14:48
  • 修改Android签名证书keystore的密码、别名alias以及别名密码

    2022-03-07 04:22:42
  • springboot中使用FastJson解决long类型在js中失去精度的问题

    2022-04-05 05:15:27
  • Java实现监听文件变化的三种方案详解

    2022-07-18 11:20:34
  • android 仿微信demo——微信消息界面实现(移动端)

    2021-08-01 11:37:26
  • 带你了解Java数据结构和算法之链表

    2023-01-04 21:23:58
  • 详解Java线程池队列中的延迟队列DelayQueue

    2023-08-30 01:22:04
  • C++数据结构与算法之判断一个链表是否为回文结构的方法

    2023-04-15 18:46:27
  • Android中判断网络是否连接实例详解

    2023-10-19 11:45:39
  • java使用FileVisitor遍历文件和目录

    2021-07-17 13:25:21
  • 深入分析C#异步编程详解

    2023-01-12 10:10:56
  • Android中ImageView实现选择本地图片并显示功能

    2023-07-02 23:47:09
  • Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    2021-07-19 04:41:18
  • C#基于HttpWebRequest实现发送HTTP请求的方法分析

    2022-01-04 22:51:03
  • android开发教程之子线程中更新界面

    2022-11-17 04:41:42
  • java使用动态代理来实现AOP(日志记录)的实例代码

    2023-11-28 22:34:45
  • asp之家 软件编程 m.aspxhome.com