1.==运算符
对于值类型:==运算符比较的是两个操作数的值是否相等,值相等返回true,否则返回false
对于引用类型:==运算符比较的是两个引用对象是否指向同一个对象,下面看一个具体的栗子:#include<string>#include<iostreausing namespace stdint m{
string a="hello"; string b="hello"; char c[]="hello"; char d[]="hello"; cout<<"a==b:"<<(a==b)<<endl; cout<<"c==d:"<<(c==d)<<endl; cout<<"a==c:"<<(a==c)<<endl; return 0; }
上面代码中:只有c==d返回0,其余都返回1
这是因为指针赋值给相同的常量字符串时候,他们实际会指向同一块内存地址,我的理解是string类的对象就相当于指向string的指针,所以相同的常量字符串在string中内存地址也是相同的,而char数组赋值的时候重新再内存中分配了空间。
2.equals和hashCode
在C#和Java中,equals()是Object类提供的方法之一,如果没有重写该方法,它是直接使用==比较两个对象的引用,但是String中覆盖了它并让它比较的是数据内容而不是引用,而==是比较的引用。
而hashCode也用来鉴定两个对象是否相等,但它返回的是对象在内存中的int值,如果没有重写hashCode方法,任何对象的hashCode方法都是不一样的。
时间: 2024-10-07 09:26:34