zoukankan      html  css  js  c++  java
  • 字符串驻留备忘

     
    下面是个人的练习:
    代码
           //字符串拘留练习 by mcjeremy
                
    //声明s1时,拘留池中没有该字符串,因此将它放进去
                
    //放进去后,string.IsIntered(s1),将返回该字符串值
                string s1 = "abc123";
                
    //声明s2时,由于拘留池中已经有该字符串存在,因此不再分配内存
                
    //s2和s1将指向同一个引用
                string s2 = "abc123";
                
    //s3背后实际调用的是concat,因此,它是动态创建的。
                
    //因此,会分配新的内存
                string s3 = s1 + s2;
                
    //创建s4时,编译器会优化它,背后调用的是ldstr,因此,会发现拘留池中已经
                
    //有abc123,因此不再分配内存,此时 s1,s2,s4都指向同一个引用
                string s4 = "abc" + "123";

                
    string s5 = "123";
                
    //创建s6时,背后实际调用的是concat,因此,它是动态创建的。
                
    //因此,会分配新的内存
                string s6 = "abc" + s5;

                Console.WriteLine(Object.ReferenceEquals(s1, s2)); 
    //true
                Console.WriteLine(Object.ReferenceEquals(s1, s3));//false
                Console.WriteLine(Object.ReferenceEquals(s1, s4));//true
                Console.WriteLine(Object.ReferenceEquals(s1,s6)); //false
                Console.WriteLine(string.IsInterned(s3) ?? "Null"); //null
                Console.WriteLine(string.IsInterned(s1) ?? "Null"); //abc123
                Console.WriteLine(string.IsInterned(s6) ?? "Null"); //abc123
  • 相关阅读:
    异常处理 try catch throw(C++)
    Kubernetes轻量级日志收集系统LokiStack
    第一章.java
    第四章.选择结构(二)
    java语法
    第三章if选择结构
    第二章.数据类型变量名和运算符
    【转载】跳槽七诫
    【转载】修改shell终端提示信息
    ubuntu11.10面板上输入法图标消失解决办法
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1676182.html
Copyright © 2011-2022 走看看