一、值类型和引用类型
值类型在栈中分配空间,由系统自动分配
引用类型在堆中分配空间,由我们用new分配
String是特殊的引用类型
using System; namespace Lesson_08{ public class Person{ public string name; } class MainClass { public static void Main (string[] args) { //值类型 //定义两个变量 int n1; int n2; //给第一个变量赋值 n1 = 5; //让第二个变量等于第一个变量 n2 = n1; //改变第二个变量 n1 += 2; //把变量输出 Console.WriteLine ("N1=!"+n1); Console.WriteLine ("N2=!"+n2); //引用类型 //定义两个引用类型变量 Person p1; Person p2; //给第一个变量赋值 p1=new Person(); p1.name = "老王"; //改变第二个变量 p2=p1; //改变第二个变量 p2.name="老张"; //把变量输出 Console.WriteLine ("p1=!"+p1.name); Console.WriteLine ("p2=!"+p2.name); } }}
二、内存中的区域:堆区(手动分配,C#中具有垃圾回收机制,所以不用手动释放)和栈区(自动分配,自动释放)
值类型的变量数据存储在栈内存区域
引用类型的变量数据存储在堆内区域
值类型变量互相赋值之后,对灵感变量的任何错做都不会互相影响,因为它们各自有独立的存储空间,操作的是两个不同的数据。
引用类型互相赋值之后,它们公用一个空间的数据,会互相影响。
值类型和引用类型课堂代码:
using System;namespace Lesson_08{ public class Person{ public string name; } class MainClass { public static void Main (string[] args) { //值类型 //定义两个变量 //系统自动在栈中开辟空间,n1和n2数据存在的空间不同 int n1; int n2; //给第一个变量赋值 n1 = 5; //让第二个变量等于第一个变量 n2 = n1; //改变第二个变量 n2 += 2; //把变量输出 Console.WriteLine ("N1="+n1); Console.WriteLine ("N2="+n2); //引用类型 //定义两个引用类型变量 Person p1; Person p2; //给第一个变量赋值 //当我们使用的时候才会开辟新的空间,在堆区开辟了空间,p1和p2使用一个数据空间 p1=new Person(); p1.name = "老王"; //改变第二个变量 p2=p1; //改变第二个变量 p2.name="老张"; //把变量输出 Console.WriteLine ("p1="+p1.name); Console.WriteLine ("p2="+p2.name); } }}
推荐视频讲师博客:http://11165165.blog.51cto.com/