8.值类型和引用类型-特殊的引用类型string
8.1 知识点
值和引用类型复习
值类型——它变我不变——存储在栈内存中
- 无符号整形、有符号整形、浮点数、char、bool、结构体(未学习)
引用类型——它变我也变——存储在堆内存中
- 数组(一维、二维、交错)、string、类(未学习)
string的它变我不变
string str1 = "123";
string str2 = str1;
str2 = "321";
Console.WriteLine(str1);//仍然是123 不是321!
Console.WriteLine(str2);//321
//因为string是引用类型 按理说 应该是它变我也变
//string非常的特殊 它具备 值类型的特征 它变我不变 这是因为c#在底层进行了特殊处理
//string的重写赋值可以理解为在堆中重新new了string变量
//string 虽然方便 但是有一个小缺点
//就是频繁的 改变string 重新赋值会产生 内存垃圾
//优化替代方案 我们会在 C#核心当中进行讲解(例如:StringBuilder)
断点调试查看地址变化
被监视的代码
//通过断点调试 在监视窗口中查看 内存信息
string str3 = "123";
string str4 = str1;
str4 = "321";
Console.WriteLine(str3);//仍然是123 不是321!
Console.WriteLine(str4);//321
打了断点运行后,添加监视窗口
添加要监视的值
观察代码指向过程中监视窗口的变化
8.2 知识点代码
using System;
namespace Lesson06_特殊引用类型string
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("特殊的引用类型string");
#region 知识点一 复习值和引用类型
//值类型——它变我不变——存储在栈内存中
// 无符号整形 有符号整形 浮点数 char bool 结构体(未学习)
//引用类型——它变我也变——存储在堆内存中
// 数组(一维、二维、交错) string 类(未学习)
#endregion
#region 知识点二 string的它变我不变
string str1 = "123";
string str2 = str1;
str2 = "321";
Console.WriteLine(str1);//仍然是123 不是321!
Console.WriteLine(str2);//321
//因为string是引用类型 按理说 应该是它变我也变
//string非常的特殊 它具备 值类型的特征 它变我不变 这是因为c#在底层进行了特殊处理
//string的重写赋值可以理解为在堆中重新new了string变量
//string 虽然方便 但是有一个小缺点
//就是频繁的 改变string 重新赋值会产生 内存垃圾
//优化替代方案 我们会在 C#核心当中进行讲解(例如:StringBuilder)
#endregion
#region 知识点三 断点调试查看地址变化
//通过断点调试 在监视窗口中查看 内存信息
string str3 = "123";
string str4 = str1;
str4 = "321";
Console.WriteLine(str3);//仍然是123 不是321!
Console.WriteLine(str4);//321
#endregion
}
}
}
8.3 练习题
int[] a = new int[]{10}; int[] b = a; b = new int[5]; Console.WriteLine(a[0]);请问打印结果为多少?
答: 10
解释:
int[]
是引用类型,当b
被赋予一个新的数组时,不再指向原始数组。a
仍然指向原始数组,因此对b
的修改不会影响到a
。在Console.WriteLine(a[0]);
中,输出的是a
所指向数组的第一个元素,即 10。
8.4 练习题代码
using System;
namespace Lesson06_练习题
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("引用类型练习题");
#region 练习题一
int[] a = new int[] { 10 };
int[] b = a;
b = new int[5];
Console.WriteLine(a[0]);
//10
#endregion
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com