四、值类型和应用类型
C#总结(二)
原创
©著作权归作者所有:来自51CTO博客作者任永娟的原创作品,请联系作者获取转载授权,否则将追究法律责任
C#总结(二)
四、值类型和应用类型
1、 值类型的变量直接包含值,将一个值类型变量赋给另一个值类型变量时,是将包含的值复制给了它进行初始化,之后在变就不管原变量的事了
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
2,引用类型是另建立一个指针,指向同一地址(托管堆中)
引用类型的变量又称为对象,可存储对实际数据的引用
3 值类型表示实际的数据(将值存储在内存中),而应用类型表示指向数据的引用,包含内存堆中对象的地址(真正的数据存储在托管堆中)
4、具体分类:
值类型: 简单类型(有符号整型,无符号×××,Unicode字符,IEEE浮点数,高精度小数,布尔型), 枚举类型 ,结构类型
引用类型:类类型,接口类型,Unicode字符串,数值类型,委托类型
五、装箱和拆箱 ===(发生在值类型和引用类型之间)
1,装箱:装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
2、取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换
3、int i = 123;
object o = i; (装箱操作)
int j = (int)o; (拆箱操作)
double=(int )o; (拆箱之后,又进行了隐式转换)
float i = 123;
object o = i;
int m = (int)(float)o;(拆箱之后又进行了显式转换)
总之:装进去是什么类型,拆箱时必拆出来什么类型。拆完之后再做什么转换就没有限制了
六、string和stringBuilder
1、代表一个不可变的顺序字符集。它是一个引用类型,直接派生自Object。它是直接复制来构造的
2、String str=new String(“大家好”)-----错误的
String a=”你好”;----正确的写法
3、String一旦定义,就是不可变的,如果字符串发生变化,就会生成新的字符串(在托管堆中再分块内存,原来的被释放掉)
string a = "1" + "3"; //这是操作的一种特殊例子(只有一块)
在托管堆中开一内存区域“13” ,通过指针指向a
a += "2"; 原内存被释放掉,又有一块新的“132”,指针指向a
一旦对字符串进行操作,内存重分,(以上特例除外 ) 原来释放掉
4、 string a = "1" + "3";
string b = "13";
未对b重分内存,只是又为原内存连了一条指针,指向b
a b指向同一块内存
以上就是---字符串的留用
5、鉴于string 的不可变性,StringBuilder(system.text命名空间下)通过维护一个char的数组来对字符串执行动态操作,在下面两种情况下会分配新对象:
试图动成构造一个字符串,它的长度超过了事先设置的容量。
试图在调用了StringBuilder的ToString方法之后修改数组
(注:StringBuilder在内部维护着一个string的字段,如果调用StringBuilder.ToString方法,这个字段就会被赋值,并且不能修改,所以一旦调用了ToString方法,内部的Char数组就会重分配。)
6、二者的比较
String 或 StringBuilder 对象的串联操作的性能取决于内存分配的发生频率。
String 串联操作每次都分配内存,而 StringBuilder 串联操作仅当 StringBuilder 对象缓冲区太小而无法容纳新数据时才分配内存。因此,如果串联固定数量的 String 对象,则 String 类更适合串联操作。这种情况下,编译器甚至会将各个串联操作组合到一个操作中。如果串联任意数量的字符串,则 StringBuilder 对象更适合串联操作;例如,某个循环对用户输入的任意数量的字符串进行串联。
7、string和stringBuilder内的各个方法属性的使用
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C#总结(三)
&n
职场 休闲 C#总结(三) -
Redis总结(二)C#中如何使用redis
xchange...
Redis C# redis 缓存 客户端 -
C#开发总结
本篇文章是某开发过程中的小总结,也可以说是记录吧。拿出来分享一下!
.net IP C# Excel Image -
C# ToString总结
1、数字转换到字符串格式说明符说明示例输出C货币2.5.ToString("C")¥2.50D
c# c 十进制数 十六进制 数字转换 -
c# 语法总结
输出 Console.WriteLine("测试开始");
程序语言--------C# jsp