zoukankan      html  css  js  c++  java
  • ●值类型、引用类型

    堆和栈的区别

      计算机分配内存的时候会分出堆和栈两个区域

      1、堆:一般由程序员分配释放,存放字符串、数组等。

      2、栈:用来存放函数的参数值、局部变量的值等。

      为方便了理解,可以把堆想象成仓库,而栈可以想象成仓库的记录、索引。

    值类型和引用类型

      值类型有整型、字符型、布尔型、浮点型、自定义结构体等。值类型是存放在内存的栈区。

      引用类型有数组、字符串等。引用类型存放在内存的堆区。

     1         static void Hello(string a)
     2         {
     3             a = "你好";
     4             Console.WriteLine("2、"+a);
     5         }
     6 
     7         static void Main(string[] args)
     8         {
     9             string n = "hello";
    10             Console.WriteLine("1、"+n);
    11             Hello(n);
    12             Console.WriteLine("3、"+n);
    13 
    14         }

      我们都知道字符串是引用类型,传址方式,分析上面代码,对于初学者,也许会以为输出结果是:1、hello;2、你好;3、你好。但实际是:

    为什么实际显示不一样呢?

      分析:字符串是存放在内存的堆区,字符串实际上是字符数组,数组的长度是不能改变的,所以,当为字符串变量重新赋值的时候,是计算机在堆区新建了字符串,并把地址赋给变量。第10行中,当定义n=“hello”时,在堆区创建了字符串“hello”,在栈区创建了变量n,n中存的是堆区“hello”的地址。当程序运行到第3行的时候,实际上是计算机重新在堆区创建了“你好”,并把地址给栈区的形参a;在此过程中,栈区n中存放的还是“hello”的地址。

      

  • 相关阅读:
    springboot 入门
    json-lib 的 maven dependency 引入及Jar包下载
    DataGridView 使用技巧精华
    SqlServer无备份下误删数据恢复
    Reflector 已经out了,试试ILSpy
    C# 反射,动态编译
    windows8和windows server2012不联网安装.net 3.5(包括2.0和3.0)
    如何附加被分离的质疑数据库? [转]
    easyui validatebox 验证类型
    所见即所得:七大无需编程的DIY开发工具
  • 原文地址:https://www.cnblogs.com/phantom-k/p/3948405.html
Copyright © 2011-2022 走看看