标签:传递 -- 包括 code TE info 形式 使用 而不是
值类型和引用类型:
值类型包括: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 }
画图可能有点乱,如果有不清楚的地方,留言
标签:传递 -- 包括 code TE info 形式 使用 而不是
原文地址:https://www.cnblogs.com/CeasarH/p/9165351.html