【问题标题】:Two objects value is null; why? [duplicate]两个对象的值为null;为什么? [复制]
【发布时间】:2020-02-29 08:20:18
【问题描述】:

方法参数sd & ed是LocalDate,我需要返回日期对象,但是sd & ed返回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

【问题讨论】:

  • 你在初始化today吗?

标签: java localdate


【解决方案1】:

因为在 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:
          ...
    }
} 

例如来自 Apache Commons LangPair-class » group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'

【讨论】:

  • 为什么LocalDate是按值,如果参数是Map,是按值引用?
  • LocalDate 是参考 -> 正确,在方法的参数中复制参考的值
  • 非常感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2014-09-17
  • 2015-07-17
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
相关资源
最近更新 更多