zoukankan      html  css  js  c++  java
  • 彻底理解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;
            }
        }
    }

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

     

    为了说明问题,再新建一个控制台应用程序:取名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 objTest = 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;
            }
        }
    }

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

    总结:

    特点

    值类型   

    引用类型

    变量存放的内容

    实际值

    引用

    内存单元

    内联(堆栈)

    默认值

    0

    传递给方法的参数

    复制值

    复制引用

  • 相关阅读:
    构建之法:第二次心得
    构建之法:第一次心得
    tomcat配置限制ip和建立图片服务器
    tomcat8.5优化配置
    java 操作 csv文件
    jsoup教学系列
    (转)js实现倒计时效果(年月日时分秒)
    本地启动tomcat的时候报java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
    使用mybatis执行oracle存储过程
    java 获取web登录者的ip地址
  • 原文地址:https://www.cnblogs.com/zwq194/p/1339083.html
Copyright © 2011-2022 走看看