两个对象的值为null;为什么?
Two objects value is null; why?
方法参数sd & ed是LocalDate,我需要return日期对象,但是sd & ed return null。
我定义了一个私有方法:
private void setQuarter(LocalDate sd,LocalDate ed,LocalDate today){
switch (getQuarter(today.getMonthValue())){
case 1:
sd=LocalDate.of(today.getYear(),1,1);
ed=LocalDate.of(today.getYear(),3,31);
break;
case 2:
sd=LocalDate.of(today.getYear(),4,1);
ed=LocalDate.of(today.getYear(),6,30);
break;
case 3:
sd=LocalDate.of(today.getYear(),7,1);
ed=LocalDate.of(today.getYear(),9,30);
break;
case 4:
sd=LocalDate.of(today.getYear(),10,1);
ed=LocalDate.of(today.getYear(),12,31);
break;
default:
sd=LocalDate.of(today.getYear()+1,1,1);
ed=LocalDate.of(today.getYear()+1,1,1);
}
}
调用此方法:
LocalDate sd=null;
LocalDate ed=null;
setQuarter(sd,ed,today);
log.info("==> sd:{},ed:{}",sd,ed);
输出信息:
==> sd:null,ed:null
因为在Java中方法的参数按值传递。
引用(即指针)通过引用的值(对象的地址)传递。
代码应如下所示:
Pair<LocalDate, LocalDate> dates = getSdAndEd(today);
LocalDate sd = dates.getLeft();
LocalDate ed = dates.getRight();
private Pair<LocalDate, LocalDate> getSdAndEd(LocalDate today){
switch (getQuarter(today.getMonthValue())){
case 1:
return Pair.of(
LocalDate.of(today.getYear(),1,1),
LocalDate.of(today.getYear(),3,31)
)
case 2:
...
}
}
示例 Pair
-class 来自 Apache Commons Lang » group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
.
方法参数sd & ed是LocalDate,我需要return日期对象,但是sd & ed return null。 我定义了一个私有方法:
private void setQuarter(LocalDate sd,LocalDate ed,LocalDate today){
switch (getQuarter(today.getMonthValue())){
case 1:
sd=LocalDate.of(today.getYear(),1,1);
ed=LocalDate.of(today.getYear(),3,31);
break;
case 2:
sd=LocalDate.of(today.getYear(),4,1);
ed=LocalDate.of(today.getYear(),6,30);
break;
case 3:
sd=LocalDate.of(today.getYear(),7,1);
ed=LocalDate.of(today.getYear(),9,30);
break;
case 4:
sd=LocalDate.of(today.getYear(),10,1);
ed=LocalDate.of(today.getYear(),12,31);
break;
default:
sd=LocalDate.of(today.getYear()+1,1,1);
ed=LocalDate.of(today.getYear()+1,1,1);
}
}
调用此方法:
LocalDate sd=null;
LocalDate ed=null;
setQuarter(sd,ed,today);
log.info("==> sd:{},ed:{}",sd,ed);
输出信息: ==> sd:null,ed:null
因为在Java中方法的参数按值传递。 引用(即指针)通过引用的值(对象的地址)传递。
代码应如下所示:
Pair<LocalDate, LocalDate> dates = getSdAndEd(today);
LocalDate sd = dates.getLeft();
LocalDate ed = dates.getRight();
private Pair<LocalDate, LocalDate> getSdAndEd(LocalDate today){
switch (getQuarter(today.getMonthValue())){
case 1:
return Pair.of(
LocalDate.of(today.getYear(),1,1),
LocalDate.of(today.getYear(),3,31)
)
case 2:
...
}
}
示例 Pair
-class 来自 Apache Commons Lang » group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
.