浅谈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 ...
随机推荐
- 自定义 Yasnippet 模板
yasnippet可以把我们常用的代码段或文本储存起来,到使用的时候只需键入几个字母就会自动带出. 比如我们在写python代码时,常常会在文件的第一行写下: #!/usr/bin/env pytho ...
- 第三方框架FMDB
摘要:关键点:创建.插入.查询.数据格式化 第三方框架FMDB -------------------------------------------------------------------- ...
- 关于JAVA那点事---i++和++i
对i++和++i 一直有点晕,今天专门抽空来研究相关的知识. 先从简单的说起. 有如下程序: int i=0; i=i++; system.out.print(i); 一眼望去这个结果显而易见是1,但 ...
- [未完成]关于CSS的总结
CSS和html 数据和样式分离,在java中称为降低了耦合性. css和html相结合的第一种方式. 1,每一个html标签中都有一个style样式属性.该属性的值就是css代码. 2,使用styl ...
- 转:nginx 从入门到精通的博文
转:http://tengine.taobao.org/book/ Nginx开发从入门到精通 缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众 ...
- Git CMD - status: Show the working tree status
命令参数 git status [<options>…] [--] [<pathspec>…] 命令格式 --short, -s 短格式输出. -- long 长格式输出, ...
- JQuery合并列(可用于导出Word)
在网上找了一些JQuery合并列的例子,但是都是用.hide()的方式,这样导致了在导出Word的时候表格严重变形 自己写了一个用.remove()方式的合并列 function arrangeTab ...
- 每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...
- android之回调函数的意义
本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273) 看完这篇文后大家可以看看这个http://blog. ...
- DOS批处理命令-goto命令
goto是一个流程控制语句 rem goto语句是一个大家都不怎么喜欢的语句,因为他的随意性太强,导致可维护性大大的降低. 语法: goto [lable] [lable]是bat程序中任意定义的 ...