• 值传递与引用传递01


    值类型的变量  VS   引用类型的变量

    值类型:结构体,枚举,int、char、bool、decimal、double

    引用类型:数组、自定义类、string、接口、集合、object

    存储的地方:

    值类型的值是存储在内存的栈当中。

    引用类型的值是存储在内存的堆当中。

    下图展示了值类型与引用类型在计算机中的存储方式

      值类型的 int num = 10;  在内存中,是被存储在栈上的空间中;

      引用类型的 string s = "123"; 在内存中,堆上地址为0x001001的空间中存储了 “123”,然后,栈上面存储的是堆上空间的地址 0x001001 。

      我们自定义的类 Person zs = new Person(); zs.Name = "张三";  在内存中,堆上地址为0x010101的空间中存储了zs这个对象,包括这个对象的Name属性的值。,然后,我们可以在栈上找到其在堆上的地址0x010101 。

    值类型我们称之为值传递,引用类型我们称之为引用传递。

    值类型和引用类型的区别:

    1.  值类型和引用类型在内存上存储的地方不一样。

    2.  在传递值类型和传递引用类型的时候,传递的方式不一样。

    3.      int、double等类型在未赋予初值的时候,默认值为0;引用类型在未赋予初值的时候,值为null。

        class Program
        {
            static void SetPersonAge(Person p,int age) 
            {
                p._Age = age;
            }
    
            static void Main(string[] args)
            {
                int i = 10;
                int j = i++;//先把i的值复制一份赋给j,然后i的值再自增
                int k = j;
                j *= 2;
                Console.WriteLine("i = {0},j = {1},k = {2}",i,j,k);  
    
        //输出结果  i = 11,j = 20,k = 10
    
                Person p1 = new Person(20);
                Person p2 = p1; //p2与p1指向了同一块内存
                p1._Age++; //p1对内存中的变量进行操作后,通过p2取出变量的值,变量的值当然会发生改变
                Console.WriteLine("p1._Age = {0},p2._Age = {1},", p1._Age, p2._Age);
    
        //输出:p1._Age = 21,p2._Age = 21
    
                SetPersonAge(p2, 30);//通过函数来传递的情形也是相同的
                Console.WriteLine("After Setage.");
                Console.WriteLine("p1._Age = {0},p2._Age = {1},", p1._Age, p2._Age);
        //输出:p1._Age = 30,p2._Age = 30
    
            }
    
            public class Person
            {
                public int _Age;
                public Person(int age) 
                {
                    _Age = age;
                }
            }
        }
  • 相关阅读:
    Sql inner join
    转:MySQL 的show processlist
    session cookie
    集群和分布式
    设计模式
    Web性能优化——缓存
    关于 java 里面的路径
    1分钟看懂log4j 配置自己想要的日志信息
    spring @bean 的理解
    如何用iptables实现NAT(转)
  • 原文地址:https://www.cnblogs.com/lcxBlog/p/4493080.html
Copyright © 2020-2023  润新知