比较两个对象是否为同一个对象
2015-07-26 13:09
246 查看
总结:
对于对象:
当判断两个对象时,使用== 、对象名.Equals()、object.ReferenceEquals(对象一,对象二);都可以。不过需要注意的是: Equals()方法和==方法容易被某个类重写,那么这样在使用它们判断两个变量是否为一个对象就不是很合理。
对于字符串:
字符串名.Equals()和 ==方法是判断两个字符串之间的内容是否相同。
而object.ReferenceEquals()是判断两个对象的堆地址是否相同。
注意:对于如下代码:
string str1=new string();
string str2=new string();
对于上面的str1和str2来说,他们是不是同一个对象,因为一旦使用new 关键字,就会在内存中开辟一个新的空间;
而对于如下代码:
string str="liqianlong";
string str="liqianlong";
对于上面的str1和str2来说,它们是同一个对象,因为他们的堆地址相同。
其中:字符串中的Equals()方法的内部结构为:
图一 图二
图一是string类继承自object类中的Equals(),将其重写之后的方法。
图二是string类重载Equals()方法的内部结构
图一和图二先是判断两个对象是否为同一个对象,如果为同一个对象,那么就说明它们的内容一样。
因此,为了保险起见,一般都使用object.ReferenceEquals()这个方法最为合适比较两个对象是否为同一个对象。
对于对象:
当判断两个对象时,使用== 、对象名.Equals()、object.ReferenceEquals(对象一,对象二);都可以。不过需要注意的是: Equals()方法和==方法容易被某个类重写,那么这样在使用它们判断两个变量是否为一个对象就不是很合理。
对于字符串:
字符串名.Equals()和 ==方法是判断两个字符串之间的内容是否相同。
而object.ReferenceEquals()是判断两个对象的堆地址是否相同。
注意:对于如下代码:
string str1=new string();
string str2=new string();
对于上面的str1和str2来说,他们是不是同一个对象,因为一旦使用new 关键字,就会在内存中开辟一个新的空间;
而对于如下代码:
string str="liqianlong";
string str="liqianlong";
对于上面的str1和str2来说,它们是同一个对象,因为他们的堆地址相同。
其中:字符串中的Equals()方法的内部结构为:
图一 图二
图一是string类继承自object类中的Equals(),将其重写之后的方法。
图二是string类重载Equals()方法的内部结构
图一和图二先是判断两个对象是否为同一个对象,如果为同一个对象,那么就说明它们的内容一样。
因此,为了保险起见,一般都使用object.ReferenceEquals()这个方法最为合适比较两个对象是否为同一个对象。
相关文章推荐
- smarty中ifelse、foreach以及获取数组中键值名的一个实例
- leetcode 46: Permutations
- UVA227-Puzzle
- xml 语法提示
- 快速使用automake
- 学习java编程能往哪些方向发展
- 二分查找及扩展
- 杭电1201 18岁生日
- 软链接与硬链接
- BCB中的TButton
- uvalive 3263
- Codeforces Round #283 (Div. 2) C. Removing Columns 模拟+构造
- HTML <map> 设置图热点
- hdu 3957 Street Fighter 重复覆盖于+精确覆盖 DancingLink
- test项目从零开始
- Fedora20上Xen的安装与部署
- android.app.PendingIntent
- 求2~2000的所有素数.有足够的内存,要求尽量快
- Leetcode 20 Valid Parentheses
- NativeXml (1):下载、安装、测试