字符串不可变性,字符串的‘暂存池’两个特性
字符串是引用类型,程序中会存在大量的字符串对象,如果每次都创建一个字符串对象,会比较浪费内存、性能低,因此CLR做了“暂存池”(拘留池,缓冲池,暂存池),在一些情况下对于字符串对象进行了重用。
string s1 = "rupeng";
string s2 = "rupeng";
string s3 = "ru" + "peng";
string s4 = new string(s1.ToCharArray());
string s5 = new string(new char[]{‘r‘,‘u‘,‘p‘,‘e‘,‘n‘,‘g‘});
Console.WriteLine(Object.ReferenceEquals(s1,s2));
Console.WriteLine(Object.ReferenceEquals(s1, s3));
Console.WriteLine(Object.ReferenceEquals(s1, s4));
Console.WriteLine(Object.ReferenceEquals(s1, s5));
Console.WriteLine(Object.ReferenceEquals(s4, s5));
面试题:上面的代码有几个字符串对象。答案:三个字符串对象s1、s2、s3是同一个字符串对象,在内容相同的情况下只有new才能产生一个新的字符串对象
相关文章
- 12-27字符串常量池解析:JVM中的String Table
- 12-27字符串常量池
- 12-27Kafka Producer 的缓冲池机制【转】
- 12-27深入探究JVM之内存结构及字符串常量池
- 12-27InnoDB存储引擎管理缓冲池的策略
- 12-27[Python源码剖析]字符缓冲池intern机制
- 12-27字符串池化,减少了三分之一的内存占用
- 12-27环形缓冲池模拟
- 12-27关于String暂存池(常量池)
- 12-27静态代码块,静态方法,构造方法的执行顺序,字符串池