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

    //引用类型(使用了class)
    class SomeRef{public Int32 x;}
    
    //值类型(使用了struct)
    struct SomeVal{public Int32 x;}
    
    static void ValueTypeDemo()
    {
        //引用类型在堆上分配空间,值类型在栈上分配,都用new初始化为0
        SomeRef r1 = new SomeRef();
        SomeRef v1 = new SomeVal();
        //引用类型提领指针,值类型直接修改内容
        r1.x = 5;
        v1.y = 5;
        //都显示5
        Console.WriteLine(r1.x);
        Console.WriteLine(v1.x);
        //引用类型只复制引用指针,值类型在栈上分配并复制成员
        SomeRef r2 = r1;
        SomeVal v2 = v1;
        //r1.x和r2.x都改成8,v1改成9,v2不变
        r1.x = 8;
        v1.x = 9;
        //显示8,9,8,5
        Console.WriteLine(r1.x);
        Console.WriteLine(v1.x);
        Console.WriteLine(r2.x);
        Console.WriteLine(v2.x);
    }

    代码执行时内容分配情况

    看内存,可以在性能选择上比较,值操作可以在数据方面比较,引用类有引用的好处,值类型也有它的优势

    在值类型转换上,C#编译器会自动生成一个值类型的实例进行装箱所需的IL代码。但是需注意代码长度(应是堆占用空间吧)和性能问题

    struct Point{public Int32 x,y;}
    public sealed class Program
    {
        public static void Main()
        {
            ArrayList a new ArrayList();
            Point p;
            for(Int32 i = 0; i < 10; i++)
            {
                p.x = p.y = i;
                a.Add(p);//对值类型进行装箱,并将引用添加到ArrayList中
            }
        }
    }
  • 相关阅读:
    RE
    【LeetCode】198. House Robber
    【LeetCode】053. Maximum Subarray
    【LeetCode】152. Maximum Product Subarray
    【LeetCode】238.Product of Array Except Self
    【LeetCode】042 Trapping Rain Water
    【LeetCode】011 Container With Most Water
    【LeetCode】004. Median of Two Sorted Arrays
    【LeetCode】454 4Sum II
    【LeetCode】259 3Sum Smaller
  • 原文地址:https://www.cnblogs.com/Events/p/3422609.html
Copyright © 2011-2022 走看看