zoukankan
html css js c++ java
对于string类的困惑
我们都知道,string类是一个reference type。看下面这段代码:
string
s1
=
"
hello
"
;
string
s2
=
s1;
Console.WriteLine(s1);
Console.WriteLine(s2);
s1
=
"
world
"
;
Console.WriteLine(s1);
Console.WriteLine(s2);
按理来说,s1被赋予world之后,那么s2应该也是指向这段内存空间,输出world,但实际上不是这样。
代码输出为:
hello
hello
world
hello
C#高级编程中是这么解释的,s1被修改后,会重新分配一块内存,来指向新的s1。这是解释了为什么会有这个结果。但是,它没有解释,CLR为什么要这么特殊处理string类。难道,因为string类用的特别多,要符合大家的使用习惯?
看下面这段代码,class很明显也是一个reference,但是结果却和上面不同。
//
类的定义
public
class
Test
{
private
int
number;
public
Test(
int
number)
{
this
.number
=
number;
}
public
int
Number
{
get
{
return
number;}
}
set
{number
=
value;}
}
public
override
string
ToString()
{
return
Number.ToString();
}
}
//
测试代码
Test t1
=
new
Test(
10
);
Test t2
=
t1;
Console.WriteLine(t1.ToString());
Console.WriteLine(t2.ToString());
t1.Number
=
20
;
Console.WriteLine(t1.ToString());
Console.WriteLine(t2.ToString());
上述代码输出的,是我们期望的值:
10
10
20
20
查看全文
相关阅读:
Day6
Day6
Day6
Day6
Day6
Day6
LeetCode "The Skyline Problem"
HackerRank
HackerRank
HackerRank
原文地址:https://www.cnblogs.com/juqiang/p/37549.html
最新文章
oc学习笔记-语法学习总结
关于ld: framework not found Foundate 错误
oc学习笔记-set和get函数 基础(Foundation)面向对象之封装方法
OC中方法与函数的区别
关于oc运行时 isa指针详解
迷茫和沮丧中,28岁的我能做一名程序员吗?
关于程序员
Python记录9:函数4:名称空间作用域+闭包函数+装饰器
Python记录8:函数的嵌套
Python记录7:函数3,函数对象
热门文章
Python记录6:函数2,函数参数
Python记录5:函数1
Python记录4:文件操作
Python记录3:集合
Python记录2:数据类型
Python记录1:基础知识常识
Day6
Day6
Day6
Day6
Copyright © 2011-2022 走看看