A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 派大星 中级黑马   /  2012-2-14 11:58  /  1900 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

输出: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;
    }


这是为什么呢?

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

3 个回复

倒序浏览
值类型直接存储的变量的值,你定义的Age 是int类型,属于值类型,当Per1.age=50赋值时,改变了其原来的值;
而引用类型保存的只是实例数据的内存引用,因此只是拷贝的其副本,其原来的值不会改变

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
Class是引用类型,它的实例存在到堆中,而Struck是值类型,它的实例是分存到栈中的!  struck可以不用new,如果不用new来创建实例,它的成员为未分配状态,只有你给它的每个成员赋值,在调用时才不会有异常!      

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
楼主,把你的代码再检查一遍,运行一下,
第一段代码的运行结果应该为50  18
第二段也是50和18
不信可以运行试试

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

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马