(十八) 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