字符串.特殊引用类型

string str="123";
//其实在内存中开辟一个空间,创建了一个String类型的对象
String str1=new String(new char[]={‘1‘,‘2‘,‘3‘});

1.字符串可以看做成一个string数组

char c=str[0];

2.str,length可以表示字符串的字符个数

3.字符串一旦被创建就不能被修改

在创建字符串对象时,会先去字符串拘留池中寻找是否有相同的内容的对象,如果没有再去创建

字符串在内存中存储在字符串拘留池中,当被重新赋值是,变量名指向新的对象,而当前对象会保留,一旦有对象存储相同内容是,将它指向旧的字符串。

4.字符串对象一旦被创建,不会被GC回收

5常用操作

string.Empty代表一个空串"",强调不是指null;

//判断指定字符串是否以指定的字符技术
bool a=str.Endwith("2");
//Equals 判断两个指定的字符串的内容是否相同

//Format格式化字符串
string s=string.Format("我爱{0},你爱{1}","你",他);

•Length

•方法

•IsNullOrEmpty()  静态方法,判断为null或者为””

•ToCharArray() 将string转换为char[]

•ToLower()  小写,必须接收返回值。(因为:字符串的不可变);

•ToUpper()              大写

•Equals()                   。。。。

•IndexOf()               如果没有找到对应的数据,返回-1

•LastIndexOf()  如果没有找到对应的数据,返回-1

•Substring()  //2个重载

•Split()

•Join()  静态方法

•Format  ()  静态方法

•Replace()  Trim()

6.字符串连接

直接连接时每次连接都会在内存中创建一个对象,连接效率底下

而在System.text空间下,的StringBulider可以很好的解决连接效率问题

StringBulider sb=new StringBuilder();
sb.append("a");
  

sb对象时可变的,当改变这个对象的字符串时不回去新开空间 而是直接改变

字符串.特殊引用类型,布布扣,bubuko.com

时间: 2024-10-11 13:42:55

字符串.特殊引用类型的相关文章

C# 引用类型之特例string

在C#编程的时候经常会使用字符串(string)类型,它也是引用类型,但是处处都不作为引用的用法来使用,实属特例,下来我一一罗列出来,供自己记忆方便: 1)字符串的直接赋值:本身字符串就是引用类型,应该使用  new 对象方法一个实例,但是微软为了方便大家,可以直接定义字符串变量 并且赋值操作,例如: string a = "我的中国心"; ,这样只是简化我们的操作: 2)一个字符串赋值给另一个字符串变量:正常的引用类型会将两个引用变量指向同一个地址,但是一个字符串变量赋值给另一个字符

第48篇 说说.Net与Java中的字符串

原文地址:http://blog.laofu.online/2017/08/18/String-In-dotnet-Java/ Java字符串碰到的问题 在写Java程序碰到一个问题,而正是这个问题引发了我对字符串的思考,Java示例代码如下: public void TestStr(String success) { if(success=="Y"){ System.out.println("Equal"); } else { System.out.println

探索C#字符串

一.前言 刚接触C#时,书上说string是一种特殊的引用类型,因此string类型变量在作为参数传递到另一个方法,被修改后原变量的值不会发生变化,当时看得我一脸懵逼,什么叫特殊....后来又听说字符串是不可变的(immutable),也就是说字符串一经创建便不能更改.今天就来探究一下所谓的特殊到底特殊在哪里,借助的手段是通过VS及时窗口查看变量堆栈地址(&VariableName). 二.字符串特性 引用类型的字符串C#中我们都知道,引用类型是分配在堆上的,值类型分配在栈上,但引用类型的地址分

140831●值类型、引用类型

堆和栈的区别 计算机分配内存的时候会分出堆和栈两个区域 1.堆:一般由程序员分配释放,存放字符串.数组等. 2.栈:用来存放函数的参数值.局部变量的值等. 为方便了理解,可以把堆想象成仓库,而栈可以想象成仓库的记录.索引. 值类型和引用类型 值类型有整型.字符型.布尔型.浮点型.自定义结构体等.值类型是存放在内存的栈区. 引用类型有数组.字符串等.引用类型存放在内存的堆区. 1 static void Hello(string a) 2 { 3 a = "你好"; 4 Console.

关于java字符串编译优化问题

情景一:不好的字符串拼接习惯    起因是这样的:一个大牛在写了一篇关于java字符串优化问题的讲解,他提到:不要使用strObj+otherValue的方法将otherValue转换为字符串形式,因为底层操作会让你吓一跳的.那么底层的实质是怎么样的呢?他的意思是这样的: 比如:    String s = "I have"; int  total = 12; Dog dog = new Dog();     //假设Dog类重写了toString方法 String msg = s +

【C#进阶系列】13 字符、字符串和文本编码

本来写了蛮多的,结果因为重启了一下机器导致写的东西都没了. 然后再回想之前写了什么,反而更像是把知识提炼了一番. 关于字符 字符什么的只要记住.net里面都用的Unicode编码就好.字符和数字之间转换用强制转换是最简单且高效的, 字符串是引用类型,存在与堆上,然而同一般的对象用newobj这个IL指令创建不同,字符串由ldstr指令创建.(load string) 关于字符串 字符串是不可变的,所有的String的方法都是创建一个新的字符串. 用+号去拼接字符串,会在堆上创建多个string对

字符串驻留池的另类用法

起因 事情的起因是这样的 基于某些无法避免的因素 我有2个dll 暂且叫 a.dll 和 b.dll 这2个类库中有一部分完全相同的代码(下文中称为代码C)——遍历当前应用程序下的所有类库文件,并注入插件(没错,就是IOC了) 当开发人员仅引用a.dll或仅b.dll的时候,并没有任何问题 但是如果一个项目需要同时引用 a.dll 和 b.dll 那么麻烦就来了 那部分完全相同的代码会被执行2次, 所有插件都会被加载2次 经过 最简单的方案当然是把a.dll和b.dll中相同的代码 抽出成c.d

字符串基础总结

字符串的常用方法 1,字符串的语法定义:string strName;strName = value;或者是string name = value ;这两种定义方式是等价的.字符串是引用类型,在定义 string strName的时候在栈空间中,定义了一个strName的空间,该空间存放一个内存地址:而当进行变量复制操作strName = "The C# Programming Language"的时候,系统会在堆内存分配一个内存空间,该内存空间存储"The C# Progr

.NET面试题01-值类型与引用类型

常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗? 6."结构"对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗? 7. 理解参数按值传递?以及按引用传递? 8. out 和 ref 的区别与相同点? 9. C#支持哪几个预定义的值类型?C#支持哪些预定义的引用类型? 10. 有几种方法可