值类型与引用类型的区别是?
- 值类型只需要一段单独的内存,用于储存实际的数据,通常储存在栈内。
- 引用类型需要两段内存
- 第一段储存实际的数据,它总是位于堆中。
- 第二段是一个引用,指向数据在堆中的位置。
装箱是如何产生的?
- 值类型向引用类型转换的过程称为装箱,值类型储存在栈,转向引用类型时会在堆内储存数据,栈上是它的引用;
包括值类型在内的所有C#类型都派生自object类型。然而,值类型是高效轻量的类型,因为默认情况下在堆上不包括他们的对象组件。然而,如果需要对象组件,我们可以使用装箱。装箱是一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型对象并返回对象引用。
下题中2个字符串的地址是否相同?
string str1 = "123456";
string str2 = "123456";
unsafe
{
fixed (char* p = str1)
{
Console.WriteLine($"str1Address:{(int)p}");
}
fixed (char* p = str2)
{
Console.WriteLine($"str2Address:{(int)p}");
}
}
2个字符串的地址相同
下题中字符串变量的值被改变了吗?
string str = "123456";
str+="789";
改变了,不推荐像易语言一样直接把字符串相加,这样字符串池内会创建新的地址,产生浪费,即使进行强转换也不会报错,程序最怕的不是报错,而是有错不报无法debug,推荐使用下面这种方式进行类型转换,如果转换失败会报错。
i.ToString()
下面的题中错误的是(多选)?
1.decimal d = 1.98;
2.long lnum = 3147483647; int inum = Convert.toInt32(a);
3.逻辑运算符 & 是短路操作符
4.int i =10; int b = i++; b变量的值是11;
5.C#中关系运算符等值判断使用 "=" 号;
1.错误,decimal,128 位精确的十进制值,28-29 有效位数,该类型需要有M后缀;
2.错误,数值范围过大,long范围大于int;
类型 |
描述 |
范围 |
int |
32 位有符号整数类型 |
-2,147,483,648 到 2,147,483,647 |
long |
64 位有符号整数类型 |
-923,372,036,854,775,808 到 9,223,372,036,854,775,807 |
3.错误,变量在前,先赋值后运算,b=10;
4.正确,&&是短路操作符,表达式1 && 表达式2:如果左边的表达式为假,则不再继续求表达式2的值(短路操作提升性能),否则继续求表达式2的值;
5.错误,C#中关系运算符等值判断使用“==”;
|