浅谈String类型
首先,我们要知道的是String类型是一个引用类型,它的基类是Object。并且它的内容是只读的。
我们有时候经常会看到两个字符串类型,一个是“Sting”,一个是“string”。大写的String是System.String,也就是 公共语言规范(Common Language Specification) CLS 所定义的字符串类型;小写的string则是C#自己的字符串类型;最终C#编译器还是会把它和System.String联系起来。
例如:
string a = "a";
a = "abc";
我们来简单分析下这两段代码:
1.第一段代码,首先会在托管堆上分配一块内存,用来存储“a”,然后将该对象的首地址保存到变量a中。(如果驻留池中有“a”,就可以直接取出)
2.第二段代码,会在托管堆上重新分配一块内存,用来储存“abc”,然后修改变量a的值,使它指向该对象的首地址。
需要注意的是,string类型提供了许多的静态和实例的方法,比如ToUpper,Concat等;这些方法都返回一个新的字符串。这些新的字符串要么是新建的,要么是从字符串驻留池中去出来的,与原字符串无关。
好了,现在让我们来看看“字符串驻留池”(Intern Pool)。顾名思义,凡是看到什么什么池之类的东西,都能猜到字面肯定存着许多对象,就是为了反复使用,避免我们自己重新new。每个进程都有自己的字符串驻留池,所以i它们之间互不影响。
我们先来看一个例子:
string a1 = "a";
string a2 = "a"; //"a"已经存在于驻留池中,直接取出
string a3 = new string('a', ); Console.WriteLine(ReferenceEquals(a1, a2));
Console.WriteLine(ReferenceEquals(a1, a3));
我们运行完这段代码之后就可以得到,第一输出True,第二个输出False。输出True,是因为直接使用的驻留池中的字符串;但是为什么第二个输出是False呢?
因为:CLR在程序执行的时候,首先会把嵌入到源代码中的文本常量字符串加入到“字符串驻留池”中;但是,程序中动态创建的字符串却不会被加入。
浅谈String类型的更多相关文章
- 浅谈String、StringBuffer与StringBuilder
浅谈String.StringBuffer与StringBuilder 先详细介绍一下String.StringBuffer与StringBuilder String: 官方对String的说明: ...
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...
- 转:浅谈char类型范围
在 C 语言中, signed char 类型的范围为 -128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是 -128~127,这个问题貌似看起来也很简单容易, 以 ...
- 浅谈String中的==和对象中引用对象类型的==
@Test public void test02() { StringBuffer sb = new StringBuffer(); sb.append('a'); sb.append(11); Sy ...
- 浅谈string
#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 using std::string;using ...
- 浅谈 String 的 hashCode() 方法
Java 中 hash 值的含义 hash 值主要是用来在散列存储结构中确定对象的存储地址的,提高对象的查询效率,如HashMap.HashTable等: 如果两个对象相同,那么这两个对象的 hash ...
- 浅谈String模块ascii_letters和digits
本文介绍string模块ascii_letters和digits方法,其中ascii_letters是生成所有字母,从a-z和A-Z,digits是生成所有数字0-9. 示例如下: In [2]: c ...
- C++ string (浅谈)
浅谈string <string> typedef basic_string<char> string; 本篇主要内容是简单地介绍 string类 在竞赛方面较实用的一些功能, ...
- 浅谈Kotlin(二):基本类型、基本语法、代码风格
浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 通过上面的文章,在A ...
随机推荐
- 沈逸老师ubuntu速学笔记(1)--安装flashplayer,配置中文输入法以及常用命令
开篇首先感谢程序员在囧途(www.jtthink.com)以及沈逸老师,此主题笔记主要来源于沈老师课程.同时也感谢少年郎,秦少.花旦等同学分享大家的学习笔记. 1.安装flash player ctr ...
- 手把手教你使用Size Class
在 iOS8 中,我们不用再像以前那样,一个页面新建多个 xib 文件来适配不同类型的屏幕,现在我们可以把各种尺寸屏幕的适配工作放在一个文件中完成,然后可以通过不同类别的 Size 来定制各种尺寸的界 ...
- 关于JAVA那点事---i++和++i
对i++和++i 一直有点晕,今天专门抽空来研究相关的知识. 先从简单的说起. 有如下程序: int i=0; i=i++; system.out.print(i); 一眼望去这个结果显而易见是1,但 ...
- CENTOS WDCP 安装及安全设置教程
1.WDCP 安装 源码安装 (ssh登录服务器,执行如下操作即可,需root用户身份安装) wget http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz t ...
- LeetCode 242
Valid Anagram Given two strings s and t, write a function to determine if t is an anagram of s. For ...
- Oracle查找被长时间锁定的对象并kill
1.用如下语句查找被锁住的表名.OSclient.Session信息 SELECT B.SID ,B.SERIAL# ,D.SPID OS系统进行号 ...
- HTML5与CSS3基础教程第八版学习笔记7~10章
第七章,CSS构造块 CSS里有控制基本格式的属性(font-size,color),有控制布局的属性(position,float),还有决定访问者打印时在哪里换页的打印控制元素.CSS还有很多控制 ...
- HDOJ2023求平均成绩
求平均成绩 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Java中几种常见排序算法
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数 ...
- C# DateTime格式化
DateTime. ToString() -- :: ToBinary() - ToFileTime() ToFileTimeUtc() ToLocalTime() -- :: ToLongDateS ...