You need to enable JavaScript to run this app. Java对象数组遍历打印仅输出最后一次录入值问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Java对象数组遍历打印仅输出最后一次录入值问题排查

运行异常根因分析
  • 引用赋值逻辑错误
    Java中对象数组的存储单元保存的是对象内存引用,而非对象实体本身。Tax[] y = new Tax[10]仅创建了长度为10、初始值为null的引用数组,不会自动生成10个独立的Tax实例。
    你的代码在循环外仅创建了1个Tax对象x,循环中反复执行y[i] = x,等于将数组10个位置全部赋值为指向同一个x对象的引用,所有数组元素本质对应内存中的同一个实体。后续每次修改这个x对象的ssn、income属性时,所有通过数组引用读到的属性值都会同步变化,最终自然会重复输出最后一次修改的内容。
  • 构造方法语法误判
    你定义的void Tax(){}、void Tax(int s, int i)并不是类的构造方法:Java构造方法的规则是方法名与类名完全一致,且不允许声明任何返回值类型。给这两个方法加上void返回值后,它们就退化为普通的成员方法,和对象初始化逻辑没有任何绑定关系,仅能被手动调用、随时修改对象属性,进一步放大了属性被反复覆盖的问题。
修复方案指引
  • 修正类定义的语法问题
    去掉两个Tax方法前的void关键字,让它们成为真正的构造方法,用于在创建对象时完成ssn、income属性的初始化,无需手动调用方法修改属性。
  • 修正数组的对象赋值逻辑
    将Tax实例的创建逻辑移动到循环内部,每次循环在数组当前位置生成一个全新的独立Tax对象,不再复用循环外创建的单一对象引用。
  • 修复后的可运行参考代码
    import java.util.*;
    
    class Tax{
        int ssn, income;
        // 去掉void,成为合法的无参构造
        Tax(){}
    
        // 去掉void,成为合法的带参构造,用于初始化对象属性
        Tax(int s, int i){
             this.ssn = s;
             this.income = i;      
        }
    
        int getssn(){
            return ssn;
        }
    
        int getincome(){
            return income;
        }
    }
    
    public class Usetaxpayer{
         public static void main(String[] args){
             Tax[] y = new Tax[10];
             int i, inc, s = 100;
             Scanner in = new Scanner(System.in);
             // 删除循环外重复创建的单一Tax实例
             for(i = 0; i < 10; i++)
             {
                 inc = in.nextInt();
                 // 每次循环创建独立的新Tax对象存入数组对应位置
                 y[i] = new Tax(s, inc);
                 s++;      
             }
             for(i = 0; i < 10; i++)
             {
                  System.out.println("SSN" + y[i].getssn()
                  + " income" + y[i].getincome() + "\n");
             }
         }
    }
    

修复后效果:数组每个位置存储的都是独立的Tax实例,各自保存对应录入的ssn与income值,遍历输出时不会出现所有位置内容重复为最后一次录入值的问题。


内容的提问来源于stack exchange,提问作者Princeofcoding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 18:57:00