0
点赞
收藏
分享

微信扫一扫

彻底理解C#中值类型和引用类型的区别


概念:

1.值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。

2.引用类型:表示指向存储在内存堆中的数据的指针或引用(包括类、接口、数组和字符串)。

区别:

基本区别在于它们在内存中的存储方式。值类型只将值存放在内存中,这些值类型都存储在堆栈中。原始数据类型(如bool和int)都属于此类型。而引用类型的内存单元中只存放内存堆中对象的地址,而对象本身放在内存堆中。如果引用的值类型的值是null,则表示未引用任何对象。

下面我用两个例子说明它们的区别,这两个例子是我在VS2005开放环境中编译通过的:

新建一个控制台应用程序:取名test1


using System;

using System.Collections.Generic;

using System.Text;

namespace Test1

{

    class Program

    {

        static void Main(string[] args)

        {

            int val = 100;

            Console.WriteLine("该变量的初始值为:{0}",val);

            Test(val);

            Console.WriteLine("该变量此时的值为:{0}",val);

            Console.Read();

        }

        static void Test(int getVal)

        {

            int temp = 10;

            getVal = temp * 20;

        }

    }

}

命令提示符窗口得出的结果:

彻底理解C#中值类型和引用类型的区别_class 


为了说明问题,再新建一个控制台应用程序:取名test2


using System;

using System.Collections.Generic;

using System.Text;

namespace test2

{

    class DataTypeTest

    {

        public int val;

    }

    class Program

    {

        static void Main(string[] args)

        {

            DataTypeTest bjTest = new DataTypeTest();

            objTest.val = 100;

            Console.WriteLine("变量的初始值为:{0}",objTest.val);

            Test(objTest);

            Console.WriteLine("变量的值为:{0}",objTest.val);

            Console.Read();

        }

        static void Test(DataTypeTest dataTest)//这里传递的是对象地址

        {

            int temp = 10;

            dataTest.val = temp * 20;

        }

    }

}


命令提示符窗口得出的结果:

彻底理解C#中值类型和引用类型的区别_null_02

总结:




特点



值类型   



引用类型



变量存放的内容



实际值



引用



内存单元



内联(堆栈)





默认值



0





传递给方法的参数



复制值



复制引用



举报

相关推荐

0 条评论