编程语言
首页 > 编程语言> > (十八) C#基础学习之值类型&引用类型&String的深入学习

(十八) C#基础学习之值类型&引用类型&String的深入学习

作者:互联网

一、值类型和引用类型

1. 定义:

值类型: int/double/bool/char/decimal/struct/enum

引用类型: string、自定义类、数组

 

2. 区别:

  * 在内存上存储的地方不一样:值类型存储在栈中,引用类型存储在堆中

     如下图所示:值类型int直接将值10储存在栈中。而引用类型string将值"123"存在堆中。但引用类型也会在栈中开辟空间,存的是string的地址0x001001

  * 传递方式不同

 

二、字符串string深入学习

1. 当给字符串重新赋值之后,旧的值不会被销毁,而是重新开辟一个空间存储新的值

如下图所示,当我们将int值重新赋值,原来的值10将会被从栈中移除

但是当我们重新给string赋值“孙全”,旧的值“张三“并不会从堆中移除,而是给新值”孙全“开辟了新的地址。只不过栈中的旧地址0x001001会被移除,换成”孙全“对应的新地址0x010101

(至于旧的值”张三”,会在程序结束后被Garbage Collection 清除)

(或者为了解决大量垃圾占用内存的问题,可以使用StringBuilder代替string:  StringBuilder sb = new StringBuilder() )

 

2. 字符串string的不可变性

  - C#中字符串有一个重要特性:不可变性。字符串一旦声明,只可通过索引读取,不可修改。

  - 我们可以将string看做一个char类型的只可读 数组

例子:

将字符串“abcdef”的第一个值变成b,即“bbcdef”

如果直接如下图操作,错误提示:read only.(string只可读)

 

正确的做法:

输出结果:bbcdef

 

3. 字符串常用的方法

 - Length 获取字符串长度

 - ToUpper() 将字符转大写

 - ToLower() 将字符转为小写

 - Equals(字符串1,StringComparison.字符串2)比较两个字符串,可以忽略大小写

 - Split() 分割字符串

 - string Replace(string old, string new): 替换;将old值替换成new的

 - bool Contain(string value): 判断字符串中是否包含...

 - bool StartsWith(): 判断字符串是否以...开始

 - bool EndsWith(): 判断字符串是否以...结束

 - string Substring(int startindex): 取从startsindex开始到最后的子字符串

 - int IndexOf(string value): 取子字符串value第一次出现的位置

 - LastIndexOf(string value)

标签:String,C#,value,类型,int,bool,字符串,之值,string
来源: https://www.cnblogs.com/qitanzhideyu/p/14424057.html