博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再谈值类型和引用类型
阅读量:6406 次
发布时间:2019-06-23

本文共 1587 字,大约阅读时间需要 5 分钟。

从概念上说

值类型就是变量包含的是具体的值
引用类型就是变量包含的是对具体值得引用,就是指针啦。
我们通过代码来演示
 

1
 
public
 
class
 Space
2
 
{
3
4 public static void Main(string[] args)
5 {
6
7
8 int i = 10;
9 int j = i;
10 System.Console.WriteLine(i.Equals(j));//true
11 System.Console.WriteLine(object.ReferenceEquals(i,j));//false
12
13
14 Order order1 = new Order("123");
15 Order order2 = order1;
16 System.Console.WriteLine(order1.Equals(order2));//true
17 System.Console.WriteLine(object.ReferenceEquals(order1,order2));//true
18 System.Console.WriteLine(order2.Number);
19
20
21 j = 15;
22 System.Console.WriteLine(i);//i依然是10
23
24 order2.Number = "999";
25 System.Console.WriteLine(order1.Number);//结果是999
26
27 }
28 }
29
30
31
 
public
 
class
 Order
32
 
{
33 public Order(string number)
34 {
35 Number = number;
36 }
37 public string Number;
38 
39 }
40

仔细看看上面的代码
int类型是值类型,因此第9行是把i的值赋给了j,第11行检查i和j的地址,得到的结果是i和j的地址是不一样的。
Order是类,类是引用类型。第15行是把order1的地址赋给了order2,所以这时候order1和order2的引用地址是一样的。
由于i和j的地址是不一样的,所以第21行修改了j的值,i的值是不受影响的。
由于order1和order2的引用地址是一样的,所以24行修改了order2的值,其实也就是改了order1的值。
不过呢,凡事有例外,比如string。
string虽然是引用类型,不过string有固化的特征,就是说string不能被改变,所有改变string的现象其实是产生了一个新的string。为什么?答案其实很简单,string是char[]的表现形式,数组是连续分配的固定空间,数组的长度并不可以被改变,因此推导:string是固化的。
以下代码请好好琢磨:
 

1
 
string
 s1 
=
 
"
hello
"
;
2
 
string
 s2 
=
 s1;
3
 System.Console.WriteLine(s1.Equals(s2));
//
true
4
 System.Console.WriteLine(
object
.ReferenceEquals(s1, s2));
//
true
5
6
7
 s2 
=
 
"
C#
"
;
8
 System.Console.WriteLine(s1.Equals(s2));
//
false
9
 System.Console.WriteLine(
object
.ReferenceEquals(s1, s2));
//
false

 

本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806283

你可能感兴趣的文章
一起谈.NET技术,.Net Framework源代码中的模式之Prototype(原型模式)
查看>>
[shell 命令] find 查找文件
查看>>
windows下启动mysql服务的命令行启动和手动启动方法
查看>>
VTK三维点集轮廓凸包提取
查看>>
【概率论与数理统计】小结9-3 - 区间估计
查看>>
Golang性能调优入门
查看>>
sqlloader外部表
查看>>
golang笔记——数组与切片
查看>>
屏蔽可忽略的js脚本错误
查看>>
散文分享
查看>>
【Vue】vue.js常用指令
查看>>
NFS学习
查看>>
MySql常用命令总结
查看>>
又一年...
查看>>
文件上传框的美化+预览+ajax
查看>>
Linux VFS
查看>>
ext不能选中复制属性_如何实现Extjs的grid单元格只让选择(即可以复制单元格内容)但是不让修改?...
查看>>
python中print的作用*8、不能+8_在 Python 3.x 中语句 print(*[1,2,3]) 不能正确执行。 (1.0分)_学小易找答案...
查看>>
python 生成html代码_使用Python Markdown 生成 html
查看>>
axure如何导出原件_Axure 教程:轻松导出图标字体所有图标
查看>>