将数组初始化为null但未进行空比较

时间:2012-09-04 09:18:36

标签: java arrays

在下面的代码中,我的期望是方法readerList.size = 0中的列表headerLinenull应该是commonValidation()。但事实并非如此,任何人都能告诉我原因吗?

String[] headerLine = null;

if (readerList != null && readerList.size() != 0){
    headerLine = readerList.get(0);         
}

commonValidation(headerLine, logDTO, hrGroupName, feedFileName);

//方法定义

public void commonValidation(String[] headerLine, TransactionLogDTO logDTO, String hrGroupName, String filename) throws PersistenceException, ServiceException, Exception {
    if ((headerLine == null) || (headerLine.length == 0)){
        logDTO.setGyr("R");

            String subject = MessageWrapper.getMessage("hr.mail.emptyfile.subject");
        String body = MessageWrapper.getMessage("hr.mail.emptyfile.body", filename);

            if (logDTO.getMessage() == null){
                logDTO.setMessage(body);
            }
            else{
                logDTO.setMessage(logDTO.getMessage() + ";" + body);
            }

        logDTO.setIsLogErrorMailSent(Boolean.TRUE);

        sendTransactionLogErrorReport(hrGroupName, subject, body);                  

        throw new Exception(body);
    }
}

2 个答案:

答案 0 :(得分:2)

String[] headerLine = null;这是一个成员变量吗?如果是,则将其设为方法局部变量。

另外

您可以在ArrayList中添加null元素,并且可以增加大小。

    ArrayList<String[]> arrayList = new ArrayList<String[]>();
    arrayList.add(null);
    System.out.println(arrayList.size());

将打印1而不是0

因此,请检查readerList.get(0)是否为null

以下是ArrayList add方法

的源代码
 410       public boolean add(E e) {
 411           ensureCapacityInternal(size + 1);  // Increments modCount!!
 412           elementData[size++] = e;
 413           return true;
 414       }

如果您发现没有null的检查,那么您必须自己完成:)

答案 1 :(得分:0)

  

但事实并非如此,(...)

我不相信。如果readerList.size() == 0 headerLine 未更改该值且仍为null