字符串内存驻留机制详解示例
时间: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);
}
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android实现Activity界面切换添加动画特效的方法
Java调用Shell命令和脚本的实现
Spring Batch入门教程篇
![](https://img.aspxhome.com/file/2023/4/83014_0s.png)
java递归设置层级菜单的实现
图文详解Java中的字节输入与输出流
![](https://img.aspxhome.com/file/2023/4/81884_0s.jpg)
修改Android签名证书keystore的密码、别名alias以及别名密码
springboot中使用FastJson解决long类型在js中失去精度的问题
Java实现监听文件变化的三种方案详解
android 仿微信demo——微信消息界面实现(移动端)
![](https://img.aspxhome.com/file/2023/2/109172_0s.png)
带你了解Java数据结构和算法之链表
![](https://img.aspxhome.com/file/2023/2/88192_0s.png)
详解Java线程池队列中的延迟队列DelayQueue
C++数据结构与算法之判断一个链表是否为回文结构的方法
Android中判断网络是否连接实例详解
java使用FileVisitor遍历文件和目录
![](https://img.aspxhome.com/file/2023/5/97925_0s.jpg)
深入分析C#异步编程详解
Android中ImageView实现选择本地图片并显示功能
![](https://img.aspxhome.com/file/2023/2/138592_0s.gif)
Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例
C#基于HttpWebRequest实现发送HTTP请求的方法分析
android开发教程之子线程中更新界面
java使用动态代理来实现AOP(日志记录)的实例代码
![](https://img.aspxhome.com/file/2023/2/60262_0s.jpg)