String类型解析

刚接触string时,只是简单地知道:string为引用类型,对string类型的操作都会重新创建一个字符串,可以当做值类型来处理。通过参考《你必须知道的.Net》对string类型的一些特性讲解如下

字符串恒定性

字符串一经创建,就不可改变。

字符串驻留(string Interning)

定义 公共语言运行库通过维护一个表来存放字符串,该表称为拘留池,它包含程序中以编程方式声明或创建的每个字符串的引用(同一字符串系统中只有一个)。

当JIT编译时,首先在拘留池(哈希表)中查找是否存在该字符串,如果存在则直接将地址返回。不存在则先托管堆上创建字符串,再将 Key(字符串值)——Value(其所对应的地址) 存入哈希表。

            string strA = "abcdef";
            string strB = "abcdef";
            //运行结果true;strA和strB指向同一内存地址,为同一字符串。
            Console.WriteLine(ReferenceEquals(strA,strB));

            string strC = "abc";
            string strD = strC + "def";
            //运行结果为false;strD是动态生成的字符串,这样的字符串是不会通过 拘留池维护的
            Console.WriteLine(ReferenceEquals(strA, strD));

            //返回true;如果动态生成的字符串在拘留池中返回所存储的地址,如果不存在将字符串加入拘留池并返回地址
            strD = string.Intern(strD);

StringBuilder

string对象是恒定的,这样对string对象进行多次修改会创建大量的string对象,影响性能。StringBuilder是动态,所以当需要对字符串大量修改时,因使用StringBuilder

原文地址:https://www.cnblogs.com/LoveTomato/p/8530221.html

时间: 2024-10-12 15:17:57

String类型解析的相关文章

java内存分配和String类型的深度解析(转)

一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析 关于String的许多令人迷惑的问题.下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文. 1.java内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小? 2.String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBu

【转】java内存分配和String类型的深度解析

一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文. 1.java内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小? 2.String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBui

Java内存分配和String类型的深度解析

一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本文将要涉及到的一些问题,如果读者对这些问题都了如指掌,则可忽略此文. 1.java内存具体指哪块内存?这块内存区域为什么要进行划分?是如何划分的?划分之后每块区域的作用是什么?如何设置各个区域的大小? 2.String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBui

Java中String类型的参数传递问题的解析

一.引入示例 public class StringAsParamOfMethodDemo { public static void main(String[] args) { StringAsParamOfMethodDemo sapm = new StringAsParamOfMethodDemo(); sapm.testA(); } private void testA() { String originalStr = "original"; System.out.println

String类型,Function类型

1.String类型:  1)创建String对象:    var str=new String(s);    String(s);    参数:参数 s 是要存储在 String 对象中的值或转换成原始字符串的值.    返回值:当String()和运算符new一起作为构造函数使用时,它返回一个新创建的String对象,存放的是字符串s          当不用 new 运算符调用String()时,它只把 s 转换成原始的字符串,并返回转换后的值. 2)String对象属性:    leng

java String类型 深入理解

本文摘自:http://www.cnblogs.com/ITtangtang/p/3976820.html 这作者写的非常好,少许地方有笔误,值得收藏 在讲解String之前,我们先了解一下Java的内存结构. 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两种类型内存:堆和非堆,堆内存(Heap Memory)是在 Java 虚拟机启动时创建,非堆内存(Non-heap Memory)是在JVM堆之外的

Java日期的格式String类型GMT,GST换算成日期Date种类

请尊重他人的劳动成果.转载请注明出处:Java日期格式化之将String类型的GMT,GST日期转换成Date类型 http://blog.csdn.net/fengyuzhengfan/article/details/40164721 在实际开发过程中常常会须要将Date类型的数据封装成XML或Json格式在网络上进行传输,另外在将Date类型的数据存到Sqlite数据库中后再取出来的时候仅仅能获取String类型的日期了,这是由于SQLite是无类型的.这样不得不面对将String 类型的日

第六章 String类型

1 构造String类型 string str1=new string('c',3); //str1="ccc" char[] chs=new char[]{'c','a','t','o','o','n'}; string str2=new string(chs);//str2="catoon"; string str3=new string(chs,0,3);//str3="cat"; 2 String类的字段.属性和索引函数 --String

Java日期格式化之将String类型的GMT,GST日期转换成Date类型

请尊重他人的劳动成果,转载请注明出处:Java日期格式化之将String类型的GMT,GST日期转换成Date类型 http://blog.csdn.net/fengyuzhengfan/article/details/40164721 在实际开发过程中经常会需要将Date类型的数据封装成XML或Json格式在网络上进行传输,另外在将Date类型的数据存到Sqlite数据库中后再取出来的时候只能获取String类型的日期了,这是因为SQLite是无类型的.这样不得不面对将String 类型的日期