c# .net当我们比较两个字符串是否相等时比较的是?

c# .net当我们比较两个字符串是否相等时比较的是什么?解释下原因?
A 字符串变量的地址 B字符串对象的地址 C字符串的值 D字符串对象的地址的地址

1、对于值类型,==和equals等价,都是比较存储信息的内容。

2、对于string类要特殊处理,它是一个内部已经处理好了equals方法和==的类,故==和equals等价,都是比较存储信。

3、对于引用类型,==比较的是引用类型在栈中的地址,equals方法则比较的是引用类型在托管堆中的存储信息的内容。

该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字,后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。


扩展资料:

布尔值TRUE将被转换为字符串 "1",而值FALSE将被表示为 ""(即空字符串)。这样就可以随意地在布尔值和字符串之间进行比较。

整数或浮点数数值在转换成字符串时,字符串由表示这些数值的数字字符组成(浮点数还包含有指数部分)。

数组将被转换成字符串 "Array",因此无法通过echo()或者print()函数来输出数组的内容。请参考下文以获取更多提示。

对象将被转换成字符串 "Object"。如果因为调试需要,需要将对象的成员变量打印出来,请阅读下文。如果希望得到该对象所依附的类的名称,请使用函数get_class()。自 php 5 起,如果合适可以用 __toString() 方法。

参考资料来源:百度百科-字符串



温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-12
1、对于值类型,==和equals等价,都是比较存储信息的内容。
2、对于引用类型,==比较的是引用类型在栈中的地址,equals方法则比较的是引用类型在托管堆中的存储信息的内容。
3、对于string类要特殊处理,它是一个内部已经处理好了equals方法和==的类,故==和equals等价,都是比较存储信
息的内容。
4、对于一些自定义的类,我们有必要重载equals方法,否则它默认为基类的equals方法(基类没有重载Equals方法则为
Object类中的Equals方法),他们的比较也为地址,而不是引用类型在托管堆中的存储信息的内容。故我们就不难理解
以下输出了:
Person p1 = new Person("jia");
Person p2 = new Person("jia");
Console.WriteLine(p1 == p2);//输出False
Console.WriteLine(p1.Equals(p2));//输出False
5、对于string我们有必要强调一下常量字符串与字符串变量的区别,请看一下例子:
//常量字符串
string x = "should it matter"; //指向同一个地址,即所谓的常量池
string y = "should it matter";
object c = x;
object d = y;
Console.WriteLine(c == d);//输出True
Console.WriteLine(c.Equals(d));//输出True
//字符串变量
string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });//指向的地址不一样,是动态分配的
string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
object g = a;
object h = b;
Console.WriteLine(g == h);//输出False
Console.WriteLine(g.Equals(h));//输出True
他们分配地址的方式不一样,string x = "should it matter";由于它的初始值是一个常量,所以其地址分配在托
管堆上的静态存储区,即所谓的常量池,而楼主的string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o'});则不
一样,它这是在托管堆上动态分配的地址。本回答被网友采纳
第2个回答  2018-11-12
应该是比较字符串的值