C#基础_值类型引用类型(十一)

值类型和引用类型:

  值类型包括:byte,short,int,long,char,float,double,bool,struct结构

  引用类型包括:类类型,接口类型和数组 等。

值类型和引用类型特点:

  1.值类型的变量保存的是原始值,即它代表的值本身。

     引用类型变量保存的是引用值, 引用值:指向内存空间的地址,代表某个对象的引用,而不是对象本身,对象本身保存在这个引用值所表示的地址位置。

  2.值类型不管是否赋值都会在栈内存中开内存。

    引用类型当声明一个变量,在栈中分配一个内存存放地址,而此时并没有为其分配堆上的内存空间。当使用new创建一个对象实例的时候,分配堆上的空间,并且把堆上的地址值传给引用,赋值给栈中开的空间。


值传递 和引用传递:

  1.基本数据类型传值,对形式参数修改不会影响实参;

  2.引用类型传引用,形式参数和实际参数指向同一个地址(同一个对象,同一块堆内存空间),所以对实际参数的修改会影响到实际参数的对象。

  3.string ,Integer, Double等是特殊类型处理,虽然是引用类型,但是也是按照值类型的情况传递,结果不会修改实际参数。

 1         static void Main(string[] args)
 2         {
 3             int num1 = 10;
 4             int num2 = 20;
 5             Console.WriteLine("num1:{0}-------num2{1}",num1,num2);
 6             Change(num1, num2);
 7             Console.WriteLine("num1:{0}-------num2{1}", num1, num2);
 8             //两次输出结果一样
 9         }
10 
11         static void Change(int a, int b)
12         {
13             Console.WriteLine("a = {0}, b= {1}",a,b);
14             int temp = a;
15             a = b;
16             b = temp;
17             Console.WriteLine("a = {0}, b= {1}", a, b);
18         }

画图演示:


引用传递示例:

 1   class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Person p;
 6             p = new Person();
 7             p.name = "赵云";
 8             Console.WriteLine(p.name);
 9             Test(p);
10             Console.WriteLine(p.name);  //输出结果岳飞
11 
12         }
13 
14         static void Test(Person p)
15         {
16             p.name = "岳飞";
17         }
18     }
19     //只写一个字段做示例
20     class Person
21     {
22         public string name;
23     }

 画图可能有点乱,如果有不清楚的地方,留言

猜你喜欢

转载自www.cnblogs.com/CeasarH/p/9165351.html