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
查看全文
相关阅读:
BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
BZOJ 3131 SDOI2013 淘金 数位dp
BZOJ 4408 FJOI2016 神秘数 可持久化线段树
[leetcode] Reverse Linked List
走迷宫问题总结
[leetcode] Max Area of Island
[leetcode] All Paths From Source to Target
[leetcode] Arithmetic Slices
[leetcode] Move Zeroes
[leetcode] Linked List Cycle
原文地址:https://www.cnblogs.com/juqiang/p/37549.html
最新文章
ccf 201903-4
迪杰斯特拉算法_优化版
map
c++学习记录(一)
关于desktop的pr(pull request)
2020面向对象程序设计寒假作业1
寒假作业1 编程题
寒假作业1 实践题
c++的类(思考题整理)
寒假作业1 问答题
热门文章
Markdown基本语法
思考题3:介绍一种C/CPP的语言的语法、标准库
思考题 c语言哪里不安全,不严谨
BZOJ 4184 shallot 线性基+分治
BZOJ 4004 JLOI2015 装备购买 高斯消元+线性基
BZOJ 4031 HEOI2015 小Z的房间 基尔霍夫矩阵+行列式+高斯消元 (附带行列式小结)
BZOJ 1013 JSOI2008 球形空间产生器 高斯消元
BZOJ 1010 HNOI2008 玩具装箱 斜率优化
BZOJ 3597 SCOI2014 方伯伯送椰子 网络流分析+SPFA
BZOJ 2756 SCOI2012 奇怪的游戏 最大流
Copyright © 2011-2022 走看看