You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:20:36