欢迎访问宙启技术站
智能推送

Java中的默认参数值是什么?

发布时间:2023-06-23 17:47:37

在Java中,所有参数都有默认值。当声明一个带参数的方法时,可以为每个参数提供一个默认值,如果没有为参数提供默认值,则默认值为null或0(对于数值类型)。

对于引用类型参数,如果没有为其提供默认值,则默认值为null。例如,如果有以下代码:

public void doSomething(String name, int age, Object obj){
    //some code here
}

那么如果调用该方法但不提供参数,则name参数将为null,age参数将为0,obj参数将为null。如果要为参数提供默认值,可以使用以下代码:

public void doSomething(String name, int age, Object obj){
    if(name==null){
        name="Unknown";
    }
    if(age==0){
        age=18;
    }
    if(obj==null){
        obj=createDefaultObject();
    }
    //some code here
}

在上面的代码中,如果调用了doSomething()方法,但没有为name、age和obj提供值,则name参数将默认设置为“Unknown”,age参数将默认设置为18,obj参数将默认设置为createDefaultObject()方法的返回值。

默认参数值还可以在方法声明时定义。例如,如果有以下代码:

public void doSomething(String name="Unknown", int age=18, Object obj=createDefaultObject()){
    //some code here
}

这定义了三个参数,分别是name、age和obj,默认值分别为“Unknown”,18和createDefaultObject()方法的返回值。如果调用doSomething()方法时没有为参数提供值,则将使用这些默认值。

需要注意的是,Java仅支持在方法声明时为参数提供默认值。这意味着无法在方法内部设置默认值。例如,以下代码是无效的:

public void doSomething(String name, int age, Object obj){
    if(name==null){
        name="Unknown";
    }
    if(age==0){
        age=18;
    }
    if(obj==null){
        obj=createDefaultObject();
    }
    //some code here
}

public void doSomething(String name=null, int age=0, Object obj=null){
    if(name==null){
        name="Unknown";
    }
    if(age==0){
        age=18;
    }
    if(obj==null){
        obj=createDefaultObject();
    }
    //some code here
}

在上面的代码中,第二个doSomething()方法是无效的,因为Java不允许在方法内部为参数提供默认值。

在Java 8之前,Java也不支持可选参数。例如,以下代码是无效的:

public void doSomething(String name, int age, Object obj=null){
    if(name==null){
        name="Unknown";
    }
    if(age==0){
        age=18;
    }
    if(obj==null){
        obj=createDefaultObject();
    }
    //some code here
}

在Java 8中,Java引入了使用可选参数的方法声明。例如,可以使用以下代码:

public void doSomething(String name, int age, Optional<Object> obj){
    Object myObject=obj.orElse(createDefaultObject());
    //some code here
}

public void doSomething(String name, int age){
    doSomething(name, age, Optional.empty());
}

在上面的代码中, 个doSomething()方法使用了Optional类来使obj参数成为可选参数。如果调用该方法时不提供obj参数,则可以使用Optional类来设置默认值。

除了使用Optional类外,还可以使用可变参数。例如,可以使用以下代码:

public void doSomething(String name, int age, Object... obj){
    Object myObject=obj.length>0 ? obj[0] : createDefaultObject();
    //some code here
}

public void doSomething(String name, int age){
    doSomething(name, age, new Object[0]);
}

在上面的代码中, 个doSomething()方法使用可变参数来使obj参数成为可选参数。如果调用该方法时不提供obj参数,则将使用默认值。不过,需要小心使用可变参数,因为它可能会导致性能问题。