为什么会自动执行hashCode 以及equals 方法?
程序代码:import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
public class Testa {
/*getSum方法 获得总额*/
public static double getSum(HashSet <Goods> goods) {
double sum=0;
double unitprice=0;
int quantity=0;
/*添加迭代器 获取每一个商品*/
Iterator<Goods> it=goods.iterator();
while(it.hasNext()) {
Goods x=new Goods();
x=it.next();
/*获取总额 商品单价*数量*/
sum+=(x.unitprice*x.quantity);
}
return sum;
}
public static void main(String[]ags) {
HashSet<Goods> gds=new HashSet<Goods>();
Scanner sc=new Scanner(System.in);
int i=0;
/*for循环 获得每一个商品对应的信息*/
for(i=0;i<5;i++) {
Goods goods=new Goods();
System.out.println("请输入商品的编号");
goods.number=sc.next();
System.out.println("请输入商品的名字");
goods.name=sc.next();
System.out.println("请输入商品的单价");
goods.unitprice=sc.nextDouble();
System.out.println("请输入商品的数量");
goods.quantity=sc.nextInt();
gds.add(goods); //!!!!!!!!!!!!!!!!
}
/*打印总额*/
System.out.println("您一共消费了"+getSum(gds)+"元!");
}
}
class Goods{
String number;
String name;
double unitprice;
int quantity;
//重写hashCode方法
public int hashCode() {
return number.hashCode();
}
//重写equals方法
public boolean equals(Object obj) {
if(this==obj)
return true;
if(!(obj instanceof Goods)) {
return false;
}
Goods goods=(Goods) obj;
boolean b=this.number.equals(goods.number);
/*如果相同 那么数量+1*/
if(b) {
goods.quantity++;
}
return b;
}
}用esclips逐句调试到!!!!!!标志的地方时 我发现hashCode 以及equals 方法是自动执行了 调用方法不是应该像good.hashCode(),good.equals(xxxx)这样吗?







