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
查看全文
相关阅读:
MySQL-InnoDB锁(一)
Java方法调用机制
并发编程-锁相关的内存语义
Java开发工具汇总
并发编程-底层实现原理
并发编程-Java内存模型
JsonTest
PTA(Basic Level)1034.有理数四则运算
PTA(Advanced Level)1081.Rational Sum
PTA(Advanced Level)1008.Elevator
原文地址:https://www.cnblogs.com/juqiang/p/37549.html
最新文章
[c++] C++中public、protected、private的区别
[ML] Gradient Boost
[科普] CPU, GPU, TPU的区别
mysql 执行 sql 语句提示Parameter '@XXX' must be defined
Java DB 访问(二) mybatis mapper xml 配置方式
Java DB访问(一) JDBC
java.io.FileNotFoundException class path resource [xxx.xml] cannot be opened
tomcat server location 地址的修改
spring mvc 返回Json
dotnet core webapi +vue 搭建前后端完全分离web架构(一)
热门文章
dotnet core cli 命令
这里有本玩转电脑的秘籍,不知少侠是否需要?
(2018版)webstorm的安装和破解
【2019的idea插件jreber使用】
(2019版本可用)【idea的安装,激活】
【Vue的路由,SPA概念】
概念数据模型到逻辑数据模型的转化(转)
逻辑数据模型之层次数据模型、网状数据模型和关系数据模型(转)
概念数据模型、逻辑数据模型、物理数据模型(转)
MySQL-InnoDB锁(二)
Copyright © 2011-2022 走看看