Equals()和==区别
来源:互联网 发布:qq语音输入软件 编辑:程序博客网 时间:2024/06/04 20:11
static void Main(string[] args)
{
string s1 = "test";
string s2 = "test";
Console.WriteLine(s1 == s2);//true
Console.WriteLine(s1.Equals(s2));//true
object o1 = s1;
object o2 = s2;
Console.WriteLine(o1 == o2);//true
Console.WriteLine(o1.Equals(o2));//true
string s3 = new string(new char[] { 't', 'e', 's', 't' });
string s4 = new string(new char[] { 't', 'e', 's', 't' });
Console.WriteLine(s3 == s4);//true
Console.WriteLine(s3.Equals(s4));//true
object o3 = s3;
object o4 = s4;
Console.WriteLine(o3 == o4);//false
Console.WriteLine(o3.Equals(o4));//true
Class1 c1 = new Class1("a");
Class1 c2 = new Class1("a");
Console.WriteLine(c1 == c2);//false
Console.WriteLine(c1.Equals(c2));//false
Class1 c3 = new Class1("a");
Class1 c4 = c3;
Console.WriteLine(c3 == c4);//true
分析:因为值类型存储在内存中的栈中,引用类型的变量在栈中只存储引用类型变量的地址,而其本身则存储在堆中
“==”比较两个变量的值是否相等,对于两个引用变量表示两个变量的地址是否相同,即栈中的内容是否相同
{
string s1 = "test";
string s2 = "test";
Console.WriteLine(s1 == s2);//true
Console.WriteLine(s1.Equals(s2));//true
object o1 = s1;
object o2 = s2;
Console.WriteLine(o1 == o2);//true
Console.WriteLine(o1.Equals(o2));//true
string s3 = new string(new char[] { 't', 'e', 's', 't' });
string s4 = new string(new char[] { 't', 'e', 's', 't' });
Console.WriteLine(s3 == s4);//true
Console.WriteLine(s3.Equals(s4));//true
object o3 = s3;
object o4 = s4;
Console.WriteLine(o3 == o4);//false
Console.WriteLine(o3.Equals(o4));//true
Class1 c1 = new Class1("a");
Class1 c2 = new Class1("a");
Console.WriteLine(c1 == c2);//false
Console.WriteLine(c1.Equals(c2));//false
Class1 c3 = new Class1("a");
Class1 c4 = c3;
Console.WriteLine(c3 == c4);//true
Console.WriteLine(c3.Equals(c4));//true
class Class1
{
string a;
public Class1(string a)
{
this.a = a;
}
}
分析:因为值类型存储在内存中的栈中,引用类型的变量在栈中只存储引用类型变量的地址,而其本身则存储在堆中
“==”比较两个变量的值是否相等,对于两个引用变量表示两个变量的地址是否相同,即栈中的内容是否相同
“equals”表示两个变量是否是对同一个对象的引用,即堆中内容是否相同
字符串是一特殊的引用类型,
s3与s4两个字符串的内容相等,o3与o4是内存中两个不同对象但内容相同则其地址不同则有o3==o4为False,o3与o4的内容相同则o3.equals(o4)为true
o1与o2是内容相等的,地址也是相等的,因为系统没有给s2分配内存,只是将“test”指向s2,所以s1和s2 direct to a same address.
p1 and p2 are different object in the memory, So the addresses of both are different,
p3 and p4......
0 0
- equals()和==区别
- equals和==区别
- "=="和equals区别
- ==和equals区别
- ==和Equals区别
- Equals()和==区别
- ==和equals区别
- ==和equals()区别
- ==和equals 区别
- ==和equals()区别
- equals和==区别
- == 和equals 区别
- equals 和 == 区别
- “=”和“equals()”的区别
- equals 和 hashcode 区别 ==和equals
- java ==和equals、equals和hashCode的区别
- 关于“==”和“equals”的区别
- 关于Equals 和== 的区别
- oracle 日常维护3
- WEB架构师成长之路之三-架构师都要懂哪些知识
- serialVersionUID的作用
- BUG管理工具认识
- svn服务器关联本地用户和组
- Equals()和==区别
- Golang:有趣的 channel 应用
- 二分搜索
- C++实现多态的方法
- 绝妙的 channel
- core power limit normal问题解决方法
- html5 进度条显示实例
- 跳转 App Store 评分 适配IOS7
- vc++中_RecordsetPtr使用