Java:重写equals()和hashCode()
1.
何时需要重写
equals()
当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。
2.
设计
equals()
[1]
使用
instanceof
操作符检查“实参是否为正确的类型”。
[2]
对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值。
[2.1]
对于非
float
和
double
类型的原语类型域,使用
==
比较;
[2.2]
对于对象引用域,递归调用
equals
方法;
[2.3]
对于
float
域,使用
Float.floatToIntBits
(
afloat
)
转换为
int
,再使用
==
比较;
[2.4]
对于
double
域,使用
Double.doubleToLongBits
(
adouble
)
转换为
int
,再使用
==
比较;
[2.5]
对于数组域,调用
Arrays.equals
方法。
3.
当改写
equals()
的时候,总是要改写
hashCode()
根据一个类的
equals
方法(改写后),两个截然不同的实例有可能在逻辑上是相等的,但是,根据
Object.hashCode
方法,它们仅仅是两个对象。因此,违反了“相等的对象必须具有相等的散列码”。
4.
设计
hashCode()
[1]
把某个非零常数值,例如
17
,保存在
int
变量
result
中;
[2]
对于对象中每一个关键域
f
(指
equals
方法中考虑的每一个域):
[2.1]boolean
型,计算
(f ? 0 : 1);
[2.2]byte,char,short
型,计算
(int);
[2.3]long
型,计算
(int) (f ^ (f>>>32));
[2.4]float
型,计算
Float.floatToIntBits
(
afloat
)
;
[2.5]double
型,计算
Double.doubleToLongBits
(
adouble
)
得到一个
long
,再执行
[2.3];
[2.6]
对象引用,递归调用它的
hashCode
方法
;
[2.7]
数组域,对其中每个元素调用它的
hashCode
方法。
[3]
将上面计算得到的散列码保存到
int
变量
c
,然后执行
result=37*result+c;
[4]
返回
result
。
5.
示例
下面的这个类遵循上面的设计原则,重写了类的
equals()
和
hashCode()
。
package
com.zj.unit;
import
java.util.Arrays;
public
class
Unit {
private
short
ashort
;
private
char
achar
;
private
byte
abyte
;
private
boolean
abool
;
private
long
along
;
相关文档:
List的用法
List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。
表1 List接口定义的常用方法及功能
从表1可以看出,List接口提供的适合于自身的 ......
最近公司碰到需要用图表的形式显示一些数据,我就开始到网上查询,查到了jfreechart和amcharts,这两者我都实现过了,jfreechart最后生成图片,但是图片效果不是我想要的,然后又研究amcharts 它的效果确实很好,而且官方网站上还有好些例子可供下载,网址是:www.amcharts.com
(想要完成一个amcharts图形需要swfobjects. ......
第一种方法使用 Desktop类,该类继承自Object
import java.awt.*;
import java.io.*;
class DesktopTest
{
public static void main(String args[])
{
if (!Desktop.isDesktopSupported())
{
System.err.println("Desktop not supported!");
System.exit(-1);
}
else
{
try{
Desktop desktop ......
传智播客JAVA培训2010-5-25
最近自己的压力太多了,虽然现在离毕业只有一个月之久了,但是现在自己对这个项目的理解却是那么的低级,当每个人面临这样的时候是不是都会和我一样有这样的顾虑,但是是人都又知道,只有通过努力让自己的实力得到增加,才会让自己心踏实一点,谁叫我是一 ......
1.使用HttpClient
用到的jar文件:commons-httpclient-3.1.jar
方法:
预先定义好Soap请求数据,可以借助于XMLSpy Professional软件来做这一步生成。
String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instanc ......