引用变量的存储位置问题
变量在栈和堆的问题记住这样的原则:
要在栈上存在,必须满足以下2个原则:1.必须是在某个方法体的作用域内(也就是我们说的局域变量);2.必须是值类型
class a
{
Public void xx()
{
Int s = “1”;
Console.Write("s");
}
}
s一定是一个类的方法中的局域变量才会在栈上开辟一个空间来表示堆上的地址
s如果是一个类的成员变量(不能为值类型)则会在类的实例化的时候跟着在堆上开辟空间
class b
{
string s = “1”;
Console.Write("s");
}
class student
{
}
student stu = new student();
stu这个变量本身是在栈上,stu指向的地址在堆上.就是说stu这个值是在栈上,但是stu的值是什么呢,是堆上的一个地址
stu本身是一个变量,stu表示的是栈上的一个空间,空间里的内容是010101(地址),地址所在的地方是堆上的内存空间
一个string 的问题
在C#中 = = 是用来判断变量的值是否相等 相等返回true 不相等返回false。Equals是用来判断两个对象(除string类型外)是否相等,相等的条件是:值,地址,引用全相等),因为String类重写了Equals方法,所以当string类型的对象用Equals方法比较时只比较两个对象有值相等返回true 不相等返回false。
equals好像比的是hashcode,是hashcode就要所有的相同,包括地址,不然光比内容是不能确定两个变量是不是指向同一个实例的