关于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 s = new String("xyz"); 创建几个对象的问题
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段