8.string

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

×

喜欢就点赞,疼爱就打赏