永发信息网

string a="a"创建的一个对象放在栈中String b=new string("a")创建的两个对象分别放在栈和堆中 a==b为什么是错误的?b在栈中的

答案:5  悬赏:70  手机版
解决时间 2021-08-13 01:12
equals是堆中的内容相同 string a="a"它产生的对象只放在栈中 在堆中是没有的 为什么 b.equals(a)返回true?
最佳答案

你在创建一个string a="a"的时候,a就在指向在栈区开辟的值。


而String b=new string("a"),你实例化对象的时候,b就在堆区开辟空间。


a和b一个在栈区一个在堆区,你用==意思是比地址,他们两个的地址就不一样了,返回false.


而用equals的话是比的内容,返回true.

全部回答
string a = "a"; string b = new String('a', 1); Console.WriteLine(a == b); Console.WriteLine(b.Equals(a)); Console.ReadLine(); ======================= 输出结果是true,true 楼上是MVP么?string放栈里?汗一个 我们看看以上code的MSIL吧     IL_0000:  nop   IL_0001:  ldstr    "a"    // 在string pool开辟一块内存,用于存放"a"   IL_0006:  stloc.0    // 当前线程堆栈中的第一个本地变量指向托管堆中存放"a"的地址   IL_0007:  ldc.i4.s   97   //  读取 ASCII 97到线程堆栈中,具体指令意思差msdn吧.....   IL_0009:  ldc.i4.1    //  这里是把构造函数的1存入线程堆栈   IL_000a:  newobj    instance void [mscorlib]System.String::.ctor(char,     int32)  // 很显然,用newobj就是在托管堆上创建了对象,在线程堆栈中的对象都用initobj,这里还invoke了 string的构造函数   IL_000f:  stloc.1   //然后把以上托管堆中的内存地址赋给线程堆栈上的第二个本地变量   IL_0010:  ldloc.0  //读取第一个本地变量的值   IL_0011:  ldloc.1  //读取第二个本地变量的值   IL_0012:  call    bool [mscorlib]System.String::op_Equality(string,     string)  //这个不用我多结束吧,调用了==操作符的方法   IL_0017:  call    void [mscorlib]System.Console::WriteLine(bool)  //不解释   IL_001c:  nop   IL_001d:  ldloc.1  //这个也不解释   IL_001e:  ldloc.0  //参考上边的注释   IL_001f:  callvirt   instance bool [mscorlib]System.String::Equals(string)  //callvirt调用实例方法Equals   IL_0024:  call    void [mscorlib]System.Console::WriteLine(bool)  //call是用来调用静态方法的   IL_0029:  nop   IL_002a:  call    string [mscorlib]System.Console::ReadLine()   IL_002f:  pop   IL_0030:  ret
a==b是比较对象句柄的值,不是比较句柄所指向的内容。a.equals(b)才相等。因为new 开辟出了新空间,所以对象句柄指向的内存空间不一样,==就不成立。若是a="abc",b="abc";a==b;则因为没有开出新的内存空间,a和b所指向的内存地址都是“abc".则相等成立。
equals比较的是两个的值,而==比较的是两个的地址
string a="a"谁告诉你他放在栈里面的?stirng是引用数据类型,你应该知道,只要是引用数据类型都放在堆里~string a=”a“做的事情就是 string a = new string("a");”a“是放在堆里面的,而a是做了一个指向,也就是句柄。equals是用来比较值的……因为值都是"a"所以返回true==是判断地址,两个"a"的地址不是同一个,当然不想等
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
整个能摆头痛。严重的时候会出现想恶心,呕吐
全世界人种最多的国家是那个?
学校购卖了一批练习册,分给了15个班,每班分14
讷河市齐齐哈尔友好学校地址在哪,我要去那里
HQ HC GP G1的区别,以及货代常用柜子内容积、
地下城勇士保密卡
求DNF各角色转职后的爆炎技能,各五行阵!!!
出油率一定,菜子的质量与菜字油的质量成正比
遂宁到康定骑摩托车怎么走?
lp有什么骂人的意思吗?
一个数的百分之25比它的百分之75少30,求这个
我不会下载视频 请大家教教
关于秋意浓浓的诗句,电脑进不到桌面怎么办?
怎么样才知道她是不是在吃自己的醋
QCC是什么东西?
推荐资讯
对病人说什么话??
恋爱是不是像打篮球一样、有进攻、有防守、也
赞颂古诗的句子,对于中国古诗的赞美.一句话
下载java的网址是什么
哪里能找到更多的体力劳动人源
请专业认识解下梦
爱情伤感语句,经典伤感爱情句子
第四字是春的诗句,第四个字是诗的成语
世上有没鬼啊
如何使自己的问问内容对好友不可见?在线等
2011版qq空间网页错误是怎么回事
博爱县焦作博爱县公安局交通警察大队第二中队
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?