zoukankan      html  css  js  c++  java
  • 浅谈值类型与引用类型的区别

    1、值类型与引用类型

    我们将我们之前学的数据类型划分成两拨: 

    值类型
    所有的数值类型(long int short byte ulong uint ushort sbyte decimal double float)、bool、char、枚举、结构

    引用类型

    string字符串、 数组、类

    划分依据: 他们在内存中存储的结构不同

    2、值类型与引用类型的异同点

    a. 相同点:
    无论是值类型的变量还是引用类型的变量, 变量始终是开辟在栈空间中的.
    b. 不同点:
    值类型的变量真实的值 直接存储在 值类型的变量之中.
    引用类型的真实的值(对象) 是存储在 堆空间之中. 引用类型的变量之中存储的是 真实的值(对象)在空间中的地址.

    3、值类型与引用类型的赋值效果不同

    在这里强调一下: 无论是什么类型的变量之间相互赋值, 都是将源变量的值拷贝1份,将这个副本赋值给目标变量.

    a. 值类型的变量在相互赋值的时候,是对1个变量的值进行修改,不会影响另外1个变量的值.

    b. 引用类型的变量之间相互赋值,两个引用类型的变量实际上指向了同1个堆空间中的地址(对象),对1个变量进行修改 会影响另外的1个变量

    特别注意的是:string是一种特殊的引用类型,string在内存中存储时按照引用类型的存储. 但是在赋值的时候不是这样的,是由于字串符的恒定性造成的。

    4、通过代码的运用更深入地了解值类型和引用类型的区别

    int temp;

    temp = 100;

    Console.WriteLine("修改前,temp=" + temp);

    ChangeValue(temp);

    Console.WriteLine("修改后,temp=" + temp);

    Student stu = new Student() { Name = "张三", Age = 30 };

    Console.WriteLine("修改前:" + stu.Name + "  :" + stu.Age);

    ChangeValue(stu);

    Console.WriteLine("修改后:" + stu.Name + "  :" + stu.Age);

    Console.ReadKey();

    static void ChangeValue(int num)

    {

          num = 200;

    }

    static void ChangeValue(Student stu)

    {

          stu.Age = 40;

          stu.Name = "李四";

    }

    结果为:

     

    5、下面给一张图讲解一下上面的案例

     

    相信通过这个形象的例子,大家应该明白值类型和引用类型的区别了吧!

  • 相关阅读:
    No necessary symbol fonts
    apt-get Error BrokenCount
    Repository XXX does not have a Realease file
    网页报错:You don't have permission to access
    Operating System not found
    JAVA平台AOP技术研究
    AOP技术基础
    SpringAOP浅析
    CGLIB动态代理
    Java设计模式—Proxy动态代理模式
  • 原文地址:https://www.cnblogs.com/zybhome/p/3828893.html
Copyright © 2011-2022 走看看