Java打印Product@5f2050f6而非对象总额问题求助
问题原因与解决方案
一、打印对象显示Product@5f2050f6的原因
Java中所有类默认继承自Object类,直接打印对象时会调用Object类的toString()方法,该方法默认返回类名@对象哈希值的十六进制表示,也就是你看到的Product@5f2050f6,它不会输出对象的具体属性值。
二、总销售额计算的隐藏错误
你的updateTotalSales方法逻辑存在问题:
public double updateTotalSales (int qntySold){ double temp1; getTotalSales(); // 此调用无实际作用,仅获取值但未使用 temp1 = totalSales + (qntySold * getProductPrice()); setTotalSales(totalSales + temp1); // 等同于 totalSales = totalSales + (totalSales + qntySold*price),会导致总销售额错误翻倍 return 0; }
这段代码会让总销售额被重复累加,实际应该是总销售额 = 原有总销售额 + 本次销量×单价,而非两次叠加。
解决方案
1. 重写Product类的toString()方法
在Product类中添加自定义toString()方法,用于输出对象属性:
@Override public String toString() { return "产品1:单价=" + productPrice + ",总销售额=" + totalSales; }
这样直接打印product1时,就会输出格式化后的属性内容,而非哈希值。如果需要通用格式,也可以写成:
@Override public String toString() { return "Product{" + "单价=" + productPrice + ", 总销售额=" + totalSales + '}'; }
2. 修正updateTotalSales方法的逻辑
简化并修正总销售额计算:
public void updateTotalSales(int qntySold) { // 直接计算本次销售额并累加到总销售额 double newSales = qntySold * getProductPrice(); setTotalSales(getTotalSales() + newSales); }
或者更简洁的内部访问写法(类内方法可直接访问成员变量):
public void updateTotalSales(int qntySold) { totalSales += qntySold * productPrice; }
3. 打印所有产品总销售额(可选)
如果需要输出全部产品的销售数据,在主类末尾补充:
System.out.println(product1); System.out.println(product2); System.out.println(product3); System.out.println(product4); System.out.println(product5);
内容的提问来源于stack exchange,提问作者inkystinky33
相关产品推荐
相关产品推荐

