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

Posted jarryhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于String类型是否是引用类型相关的知识,希望对你有一定的参考价值。

在学习原型模式的时候,需要实现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类型是否是引用类型的主要内容,如果未能解决你的问题,请参考以下文章

String为值类型还是引用类型

Java基础--关于Object的一些通用方法

java String 类型总结

go语言关于值类型和引用类型

关于String s = new String("xyz"); 创建几个对象的问题

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段