易混问题总结---(equals VS ==)
2004-08-12 11:22
435 查看
==和equals
“測試物件參考時,唯有當兩個參考指向同一物件時,==運算子的結果才為true,同樣的,
唯有當兩個參考指向不同物件時,!=運算子的結果才為true,這兩個運算子的處理與物件
的內容無關。需要特別注意的是,在String中使用==,因為Java為節省記憶體,會在某一
輪調區中維護唯一的String物件,所以如果在類別裡使用同一字串,Java只會建立一個唯
一的字串而已。”[参考-->(equals和==)]
在Object中equals和==都是默认比较两个reference是否是指向同一对象的,但是由于
在String中equals被覆写了,所以equals对于String来讲是比较内容的了。但是对于其他
的类的对象的内容的比较该怎么半呢,那就只要自己覆写了,举个例吧:
class BecauseLove
{
public String str="";
BecauseLove(String s){
str=s;
}
//+---------override-------------+
public boolean equals(Object o){
if(this==o){//先比较是否是指向同一对象
return true;
}
if(o instanceof BecauseLove){//instanceof操作符的作用是判断一个变量是否是右操作数指出的类的一个对象
BecauseLove bl=(BecauseLove)o;
return str.equals(bl.str);
}
return false;
}
//+---------------------------------+
}
class TestBL
{
BecauseLove BL1 = new BecauseLove("First");
BecauseLove BL2 = new BecauseLove("First");
void compare(BecauseLove a ,BecauseLove b){
if (a.equals(b))
{
System.out.println("Yes");
}
}
void test(){
compare(BL1,BL2);
}
public static void main(String args[]){
TestBL t = new TestBL();
t.test();
}
}
+——--------------------------------------+
这样就可以比较对象的内容了。当然在覆写过程中会要注意一些问题的,具体是什么问题还在学习中……
“測試物件參考時,唯有當兩個參考指向同一物件時,==運算子的結果才為true,同樣的,
唯有當兩個參考指向不同物件時,!=運算子的結果才為true,這兩個運算子的處理與物件
的內容無關。需要特別注意的是,在String中使用==,因為Java為節省記憶體,會在某一
輪調區中維護唯一的String物件,所以如果在類別裡使用同一字串,Java只會建立一個唯
一的字串而已。”[参考-->(equals和==)]
在Object中equals和==都是默认比较两个reference是否是指向同一对象的,但是由于
在String中equals被覆写了,所以equals对于String来讲是比较内容的了。但是对于其他
的类的对象的内容的比较该怎么半呢,那就只要自己覆写了,举个例吧:
class BecauseLove
{
public String str="";
BecauseLove(String s){
str=s;
}
//+---------override-------------+
public boolean equals(Object o){
if(this==o){//先比较是否是指向同一对象
return true;
}
if(o instanceof BecauseLove){//instanceof操作符的作用是判断一个变量是否是右操作数指出的类的一个对象
BecauseLove bl=(BecauseLove)o;
return str.equals(bl.str);
}
return false;
}
//+---------------------------------+
}
class TestBL
{
BecauseLove BL1 = new BecauseLove("First");
BecauseLove BL2 = new BecauseLove("First");
void compare(BecauseLove a ,BecauseLove b){
if (a.equals(b))
{
System.out.println("Yes");
}
}
void test(){
compare(BL1,BL2);
}
public static void main(String args[]){
TestBL t = new TestBL();
t.test();
}
}
+——--------------------------------------+
这样就可以比较对象的内容了。当然在覆写过程中会要注意一些问题的,具体是什么问题还在学习中……
相关文章推荐
- [总结]关于VS2002下的项目迁移到VS2005下相关问题总结
- vim7.4官方源码在vs2013的编译方法及问题总结
- vs学习中遇到的问题总结
- vs中ATL(exe)开发一些问题总结
- VS2010 + libnet开发中,无法解析的外部符号 问题出现的原因总结
- VS 编译问题总结与分析
- 总结篇:面试中 随机数"等概率"vs"不等概率"生成问题
- vs2012 +ef6 操作mysql数据库问题总结
- vs工具使用和问题总结
- VS 2010 调试问题总结
- 关于cmake+mingw+yasm+vs 生成工程 编译代码问题总结
- CUDA&OPenGL环境搭建和测试问题总结(VS2015)
- vs2013下配置openCV3.1.0出现的问题总结
- VS系列编译问题总结 无法打开预编译头 Debug\XXX.pch 无法解析的外部符号....
- 博弈问题-取石子(D题小牛vs小客)附取石子游戏总结
- VS调试STL问题总结
- vs2013 MFC 添加图片出现的问题 总结:
- 最近编写过程中遇到的问题总结(在练习qt pcl vs vtk的融合中)
- VS2013发布web项目到IIS上遇到的问题总结
- 关于VS2015安装Team Explorer for Microsoft Visual Studio 2015问题总结(已解决)