Java中的equals()和hashCode()方法
在Java语言中,一般不需要自定义equals()和hashCode()这两个方法,当需要对对象的内容进行比较的时候,才需要这样两个方法。例如,需要把对象放入HashSet或者把对象作为key放入HashMap、 Hashtable时,如果不想把具有相同内容的两个对象作为两个对象来看待,就需要重定义这两个方法。这两个方法的使用是紧密配合的,要是设计了其中一个,就要设计另外一个。
equals():
用于两个对象的比较,在Object类中已经实现了这个方法,是对对象内部地址的比较,即如果两个对象的内部地址是一样的则是相等的。如果要按照对象内容的进行比较,就需要重载这两个方法。Java语言对equals()的要求如下,这些要求是必须遵循的:
对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
反射性:x.equals(x)必须返回是“true”。
类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
任何情况下,x.equals(null)永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。
hashCode():
这个方法返回的是一个用来进行hash操作的整型数,可用于在Collection对象中定位特定对象的位置。Object中默认的实现是把对象内部地址转化为整数作为hashCode。
hashCode()的返回值和equals()的关系如下:
如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。
如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。
这里有必要说明一下HashMap的原理。为了优化查找对象的性能,在HashMap中按照键值对象的hash值放了若干个箱子,当有一个键值对象加入进来时,调用键值对象的hashCode()方法,根据计算出的hash值把对象放入对应的箱子。当对键值对象进行查找时,首先计算对象的hash值,找到对应的箱子,然后调用equals()与箱子中的对象逐个比较,直到找出相等的对象或者遍历了一遍。
如果x.eq
相关文档:
Java学习从入门到精通
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
public class ReadXML {
private File file;
public ReadXML(String filename){
File file=new File(filename);
this.file=file;
}
/**
......
java exception 解决方案 - 我的异常网|异常|exception 770 - java.net.unknownhostException 771 - com.ibatis.struts.BeanActionException 772 - javax.servlet.jsp.JspException:Cannot find bean under name org.apache.struts.taglib.html.BEAN 773 - java.lang.NoClassDefFoundError:org apache commons lang Unhand ......
首先确定用的Servlet / JSP的版本。
查看web.xml的开头部分,如果有以下内容,表示是Servlet 2.4 / JSP 2.0。
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.s ......
在JAVA中:
1. 函数重载是一个类中声明了多个同名的方法,但有不同的参数个数和参数类型。
2. 函数重构是指在子类中声明与父类同名的方法,从而覆盖了父类的方法。重构解决了子类与父类的差异问题。
例子如下:
//重载
class A {
public d (){};
public d (q){};
public d (q,w){};
}
//重写 ......