字符串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引用。

????????

时间: 2024-10-10 06:02:43

字符串String类的相关文章

《Javascript权威指南》学习笔记之十一:处理字符串---String类和正则表达式

一.正则表达式的基本语法 1.概念:正则表达式由普通字符和特殊字符(元字符)组成的文本模式,该模式描述在查找字符串主体时待匹配的一个或者多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 普通字符包括所有的大小写字母字符.所有数字.所有标点符号及一些特殊符号.普通字符本身可以组成一个正则表达式,也可以和元字符组合组成一个正则表达式:而元字符则具有特殊的含义,包括().[].{}./.^.$.*.+.?...|.-.?:.?=.?! 2.基本语法 3.优先权含义 二.使用

JavaScript学习-js中的数组/Boolean类/字符串String类

JavaScript学习 [js中的数组] 1.数组的概念:是在内存中连续储存对个有序元素的结构 元素的顺序称为下标,通过下标查找对象元素. 2.数组的声明: ① 字面量声明:var arr1 = []; js中,同一数组,可以储存多种不同的数据类型: 例如: var arr1 = [1,"2",true,{"name":"hahhah"},[1,2]] ② new关键字声明: var arr2 = new Arry(参数) >>&g

系统类 字符串String类

java编程语言中的字符串. 在java中,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象. String 对象是 System.Char 对象的有序集合,用于表示字符串.String 对象的值是该有序集合的内容,并且该值是不可变的. String类是不可变(final)的,对String类的任何改变,都是返回一个新的String类对象.这样的话把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和

C#中字符串String类及方法的使用(一)

一.实例化String对象 1.最常用的方法是直接将字符串分配到String变量中. 注意1:转义字符 \ ,字符串内含有引号"".反斜杠\或换行等都需要使用“\”输出. 注意2:在字符串前面使用@符号,指明转义序列不被处理. 1 string string1 = "This is a string created by assignment."; 2 Console.WriteLine(string1); 3 string string2a = "The

20140902 字符串拷贝函数 右旋转字符串 string类的编写

1.strncpy字符串拷贝函数 //strncpy的程序 #include<stdio.h> #include<assert.h> char *strncpy1(char *strDest,const char *strSrc,int n) { assert((strDest!=NULL)&&(strSrc!=NULL)&&n>0); if(strDest==strSrc) return strDest; char *Address=strD

Java字符串String类的indexOf()方法

indexOf()的用途:用于字符串中子串的查找 indexOf()的用法:返回字符中indexof(string)中字串string在父串中首次出现的位置,从0开始,没有返回-1. 语法stringObject.indexOf(searchvalue,fromindex) 参数 描述 searchvalue 必需.规定需检索的字符串值. fromindex 可选的整数参数.规定在字符串中开始检索的位置.它的合法取值是 0到 - 1.如省略该参数,则将从字符串的首字符开始检索. 说明该方法将从头

处理字符串-String类和正则表达式

---基本元字符       . [] | () ---限定元字符      +至少匹配一个 *匹配0个或任意多个 ?匹配0个或1个(默认是贪心的)           当?在(*,+,?,{n},{n,m})后面时,匹配的是非贪心的,尽可能短 {n}匹配n次 {n,}至少匹配n次 {n,m}最少匹配n次最多匹配m次 ---首尾元字符       ^   $ ---简写形式   \d 匹配一个数字字符[0-9] \D匹配一个非数字字符[^0-9] \w匹配包括下划线的任何单词字符[A-Za-z0

C++ String类字符串操作

string类的构造函数: string(const char *s);     //用c字符串s初始化 string(int n,char c);      //用n个字符c初始化 此外,string类还支持默认构造函数和复制构造函数,如string s1:string s2="hello":都是正确的写法.当构造的string太长而无法表达时会抛出length_error异常 string类的字符操作: const char &operator[](int n)const;

Java (六、String类和StringBuffer)

Java String 类 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 创建字符串 // ==比较的是字符串在栈中存放的首地址,而equals()比较的是两个字符串的内容是否相同 //普通的声明字符串的方法,只会在字符串常量池里开辟空间,并且开辟空间之前,会检查字符串常量池里是否已存在 //相同的数据,如果有,直接指向已存在的数据,如果没有会在字符串常量池里开辟一个新的空间 String s = "ccy"