一、值类型和引用类型
值类型在栈中分配空间,由系统自动分配
引用类型在堆中分配空间,由我们用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);
}
}
}
赋值
值类型的变量数据存储在栈内存区域
引用类型的变量数据存储在堆内区域
值类型变量互相赋值之后,对灵感变量的任何错做都不会互相影响,因为它们各自有独立的存储空间,操作的是两个不同的数据。
引用类型互相赋值之后,它们公用一个空间的数据,会互相影响。
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);
}
}
}