再谈值类型和引用类型

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

 

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


上一篇:Canal数据同步


下一篇:Canal学习笔记