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

Java中调用少参构造器时如何避免类变量被赋默认值?

解决Java对象输出时区分未初始化基本类型字段的问题

你的问题核心是int作为基本数据类型,默认值为0,无法区分"未设置"和"设置为0"两种情况,所以用少参构造创建的对象调用display()时会输出默认的0。要实现预期输出,有两种常用方案:

方案一:使用包装类替代基本类型(推荐)

把age的类型从int改为Integer(引用类型,默认值为null),然后在display()方法中判断age是否为null,决定是否输出该字段:

修改后的代码:

public class Sample {
    
    int id;    
    String name;
    Integer age; // 改为包装类

    Sample(int i, String n){
        id = i;
        name = n;
    }

    Sample(int i, String n, Integer a){ // 参数同步改为Integer
        id = i;
        name = n;
        age = a;
    }

    void display(){
        StringBuilder sb = new StringBuilder();
        sb.append(id).append(" ").append(name);
        if (age != null) { // 仅当age被显式设置时追加输出
            sb.append(" ").append(age);
        }
        System.out.println(sb);
    }

    public static void main(String args[]){
        Sample s1 = new Sample(111,"Karan");
        Sample s2 = new Sample(222,"Aryan",25);
        s1.display();
        s2.display();
    }
}

运行后输出:

111 Karan
222 Aryan 25

方案二:添加状态标记位

如果必须保留基本类型字段,可以增加一个布尔标记位,用来标记age是否被显式初始化:

public class Sample {
    
    int id;    
    String name;
    int age;
    boolean isAgeSet; // 标记age是否被设置

    Sample(int i, String n){
        id = i;
        name = n;
        isAgeSet = false; // 未设置age
    }

    Sample(int i, String n, int a){
        id = i;
        name = n;
        age = a;
        isAgeSet = true; // 已设置age
    }

    void display(){
        if (isAgeSet) {
            System.out.println(id+" "+name+" "+age);
        } else {
            System.out.println(id+" "+name);
        }
    }

    public static void main(String args[]){
        Sample s1 = new Sample(111,"Karan");
        Sample s2 = new Sample(222,"Aryan",25);
        s1.display();
        s2.display();
    }
}

方案说明

  • 方案一更简洁,利用Java引用类型的null值天然区分"未初始化"状态,无需额外维护标记字段。
  • 方案二适合必须保留基本类型的场景,但需要额外维护状态位,代码相对繁琐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:21:24