菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
365
0

(十八) C#基础学习之值类型和引用类型、装箱和拆箱、String的深入学习

原创
05/13 14:22
阅读数 48571

一、值类型和引用类型

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)

例子:

发表评论

0/200
365 点赞
0 评论
收藏