黑马程序员技术交流社区

标题: 值类型和引用类型的区别 [打印本页]

作者: 派大星    时间: 2012-2-14 11:58
标题: 值类型和引用类型的区别
输出:50和18
class Class1
    {
        static void Main(string[] args)
        {
            Person pre1;
            pre1.name = "张三";
            pre1.sex = "男";
            pre1.age = 18;

            Person pre2;
            pre2 = pre1;
            pre1.age = 50;
            Console.WriteLine(pre1.age);
            Console.WriteLine(pre2.age);
            Console.ReadKey();
        }
    }
    struct Person
    {
        public string name;
        public string sex;
        public int age;
    }
输出都是50;
static void Main(string[] args)
        {
            Person pre1 = new Person() ;
            pre1.name = "张三";
            pre1.sex = "男";
            pre1.age = 18;

            Person pre2;
            pre2 = pre1;
            pre1.age = 50;
            Console.WriteLine(pre1.age);
            Console.WriteLine(pre2.age);
            Console.ReadKey();
        }
    }
    struct Person
    {
        public string name;
        public string sex;
        public int age;
    }


这是为什么呢?
作者: 严鹏    时间: 2012-2-14 12:42
值类型直接存储的变量的值,你定义的Age 是int类型,属于值类型,当Per1.age=50赋值时,改变了其原来的值;
而引用类型保存的只是实例数据的内存引用,因此只是拷贝的其副本,其原来的值不会改变
作者: lsmlsm    时间: 2012-2-14 12:52
Class是引用类型,它的实例存在到堆中,而Struck是值类型,它的实例是分存到栈中的!  struck可以不用new,如果不用new来创建实例,它的成员为未分配状态,只有你给它的每个成员赋值,在调用时才不会有异常!      
作者: 双十二    时间: 2012-2-14 13:13
楼主,把你的代码再检查一遍,运行一下,
第一段代码的运行结果应该为50  18
第二段也是50和18
不信可以运行试试

结构就是一种值类型数据,结构变量不是引用型的,
pre1.age = 18
pre2 = pre1;
pre1.age = 50
只看这3段代码就可以得出答案了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2