小议Java中==、equals_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 小议Java中==、equals

小议Java中==、equals

 2014/11/15 19:06:45  千年西瓜  程序员俱乐部  我要评论(0)
  • 摘要:写Java单链表中移除指定数据的节点操作时,需要比较当前节点和指定删除节点的数据域是否相同,这就涉及到两个Object类型的变量比较,如果直接使用Object类中提供的equals()比较,发现运行结果总不正确。由此引出思考:equals()比较的是什么?equals比较和==有什么区别?这个移除操作该怎么写?下面是进行链表指定数据移除的代码和进行测试发现的问题:if(node.getNext().getdata().equals(removedata)
  • 标签:Java
写Java单链表中移除指定数据的节点操作时,需要比较当前节点和指定删除节点的数据域是否相同,这就涉及到两个Object类型的变量比较,如果直接使用Object类中提供的equals()比较,发现运行结果总不正确。由此引出思考:equals()比较的是什么?equals比较和==有什么区别?这个移除操作该怎么写?
下面是进行链表指定数据移除的代码和进行测试发现的问题
class="java">
if(node.getNext().getdata().equals(removedata))//如果node的下一节点的数据就是要找的数据,现在node就是要移除数据的前一个指针
				{
					 index=i+1;
					 count++;
					 removeNode = node.getNext();//removeNode就是要移除数据的节点
					//获取要删除节点的下一个节点,定义为nextNode
				     Node nextNode = removeNode.getNext();
					//将removeNode的下一个节点nextNode赋给node,这样要移除节点的前一个节点就跳过removeNode直接指向nextNode了
					 node.setNext(nextNode);
				}
				node = node.getNext();//获取下一节点

定义一个学生类进行测试时,对学生信息管理时发现不管要删除的是哪个位置的节点,运行时却发现它移除的总是根节点。
我们知道,Java中==是比较引用地址的,那么能说equals 是比较内容的吗?
我们先来看看equals 的源码

public boolean equals(Object obj) {
	return (this == obj);
    }

equals是Object父类里面定义的一个方法,从Object 角度看对象比较,equals就相当于==,也就是比较的引用地址,这里要比较的是对象里面的内容,所以要重写equals方法。分别比较对象里的各个属性,每个属性都相等,才能说对象相等。
/**
	  * 重写equals方法
	  */
	 public boolean equals(Object obj)
	 {
		 Student stu=(Student)obj;//强制转成Student类型
		 if(stu.getname()==this.getname()&&stu.getscore()==this.getscore())
			 return true;
		 else return false;
	 }//分别比较学生类中的名字和分数属性






发表评论
用户名: 匿名