Java中的默认参数值是什么?
在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参数,则将使用默认值。不过,需要小心使用可变参数,因为它可能会导致性能问题。
