码迷,mamicode.com
首页 > 其他好文 > 详细

关于String类型是否是引用类型

时间:2020-06-29 11:49:15      阅读:35      评论:0      收藏:0      [点我收藏+]

标签:void   string类   col   new   副本   实验   public   lan   修改   

在学习原型模式的时候,需要实现ICloneable时,调用object的MemberwiseClone(浅表副本)方式时发现一个问题:
MemberwiseClone方法只会将值类型完全Clone,引用类型在Clone时只复制引用。
在我的实验中发现string类型的对象在MemberwiseClone之后地址发生了变化。


    class PrototypePattern : ICloneable
    {

        public String name;
        String info;
        String college;
        public PrototypePattern(String name, String info, String college)
        {
            this.name = name;
            this.info = info;
            this.college = college;
            Console.WriteLine("奖状创建成功!");
        }
        public void setName(String name)
        {
            this.name = name;
        }
        String getName()
        {
            return (this.name);
        }
        public void display()
        {
            Console.WriteLine(name + info + college);
        }
        public Object Clone()
        {
            Console.WriteLine("拷贝成功!");
            return base.MemberwiseClone() as PrototypePattern; ;
         }
}

        static void Main(string[] args)
        {

            PrototypePattern obj1 = new PrototypePattern("张三", "同学:在2016学年第一学期中表现优秀,被评为三好学生。", "韶关学院");
            obj1.display();
            PrototypePattern obj2 = (PrototypePattern)obj1.Clone();
            Console.WriteLine(obj1.name.Equals(obj2.name));
            //obj2.setName("李四");
            obj2.name += "李四";
            Console.WriteLine(obj1.name.Equals(obj2.name));
            obj2.display();
            obj1.display();
            Console.ReadLine();
        }

String类型本质是引用类型,但是String类型指向是一个常量,所以每次修改时需要重新创建一个新的常量字符串,所以有了值类型的效果。

关于String类型是否是引用类型

标签:void   string类   col   new   副本   实验   public   lan   修改   

原文地址:https://www.cnblogs.com/jarryHu/p/13206776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!