为什么会自动执行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)这样吗?