字符串String类
1. String类是一个密封类。用关键字sealed修饰;
2. 字符串的两个特性:
·不可变性:string类型变量,一旦声明就表明它是不会被改变的。因此,string中的方法对string类型的变量进行处理之后都需要返回值来接收。比如说:ToUpper()【将字符串转化为大写的形式】ToLower()【将字符串转化为小写形式】。
那么有这么一种情况和前面说的有点矛盾?
string s1="abc";
string s2="x";
s1=s1+s2;
Console.WriteLine(s1);//abcx
这个问题看下面的图:
对于:str1=str1+str2;先是进行加法,之后就会在内存中开辟一个空间,然后将原来的s1指向新的内存空间。
·字符串池:
所谓的字符串池就是存放一堆字符串的容器。池里面只会存放常量字符串,不会保存变量字符串,因为字符串的不变性,变量会导致不断地产生新的内存空间,而且只有关闭程序之后才会被释放。
例如:string name="liqianlong"; 常量字符串
string str=a+b; 变量字符串
在这里就可以解释下面的问题:
为什么 string name="liqianlong";
string name1="liqianlong";是同一个对象?
因为没创建一个字符串对象就会先去"字符串池"里面查找,如果有,那么直接将该内存空间上面的地址赋给该变量。如果没有,就会重新创建内存空间。这样两个字符串对象的内存地址一样,就成为同一个对象。
注意:
string a="a";
string b="b";
string c="c";
string s1=a+b+c;
和 string s1="a"+"b"+"c";
这个两个是有区别的,string s1=a+b+c;这句话读取的是a、b、c里面的内容,然后将这三个变量相连接。在此过程中,重新开辟了一个空间,用来存放值,并且不会将值存放到字符串池里面。
而string s1="a"+"b"+"c";会将a、b、c连接之后,回到字符串池里面查找,如果有就会将"abc"所在的内存空间的地址赋给对应的变量,如果没有,就会重新创建一个内存空间,并且将该常量存放在字符串池里面。
3. 怎样将一个变量保存到字符串池里面?
例如:
使用string.Intern(xx)方法,作用是先判断字符串池里面有没有该字符串,如果有,那么就返回暂存池中它的引用,如果不存在,那么就向暂存池里面添加该字符串。
使用string.IsInterned()方法,作用是在暂存池中查找该字符串,如果已经将该字符串添加暂存池里面,那么就返回引用,否则返回nullNothingnullptrnull引用。
字符串String类的更多相关文章
- Java基础——数组应用之字符串String类
字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...
- Java入门篇(五)——Java的字符串/String类
前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...
- Java入门篇(五)——字符串/String类
前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...
- [Java初探04]__字符串(String类)相关
前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...
- [Swift]字符串(String类、NSString类)常用操作
NS是Cocoa类对象类型的前缀,来源于乔布斯建立的另一家公司--NeXTNSString的使用方法,和Swift语言中的String有很多相似之处. 1.字符串的定义String类 var str1 ...
- Java字符串String类操作方法详细整理
关于String类的基本操作,可分为以下几类: 1.基本操作方法 2.字符串比较 3.字符串与其他数据类型之间的转换 4.字符与字符串的查找 5.字符串的截取与拆分 6.字符串的替换与修改 我觉得在整 ...
- java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类
1.String类 1.1String类的概念和储存结构: (1)字符串是一个比较特殊的对象,可以使用new,也可以不使用new来创建字符串对象 String s1 = new String(&quo ...
- 20140902 字符串拷贝函数 右旋转字符串 string类的编写
1.strncpy字符串拷贝函数 //strncpy的程序 #include<stdio.h> #include<assert.h> char *strncpy1(char * ...
- 系统类 字符串String类
java编程语言中的字符串. 在java中,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象. String 对象是 System.Char 对象的有序集合,用 ...
随机推荐
- 一个给力的html5 画多边形的例子
只需改变参数就能画出你想要的多边形,代码简单!不得不惊叹canvas的强大! 代码奉上 <!doctype html> <html> <head> <meta ...
- 如何创建一个简单的struts2程序
如何创建一个简单的Struts2程序 “计应134(实验班) 凌豪” 1.创建一个新的Web项目test(File->new->Web Project) 2.Struts2框架的核心配置文 ...
- BaaS with Kinvey and Delphi 10.1 Berlin
In this article I will show you how to connect yourdesktop and mobile applications to a mobile backe ...
- 串的模式匹配——Brute-Force算法
Brute-Force算法的基本思路为:从目标串s=“s0s1...sn-1”的第一个字符开始和模式串t=“t0t1t2...tn-1”中的第一个字符比较,若相等,则继续逐个比较后续字符: 否则从目标 ...
- css 样式
<!doctype html> <html lang="en"> <head> <meta name="Generator&qu ...
- 什么是epoll
什么是epoll epoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll.当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new A ...
- 51nod 1244 莫比乌斯函数之和(杜教筛)
[题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...
- Android 五大布局(LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout、TableLayout )
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- Thread’s start method and run method
工作中用到了Thread,一开始用错了,仔细研究了一下,稍作整理. 前言,今天写代码居然这样写的 new Thread() { @Override public void run() { System ...
- HDU2159:FATE(二维完全背包)
Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现 ...