如上图,程序报错,调试的时候发现
1.get出来是空
2.判断!=null报错了
3.判断==null 是true 
这究竟是什么原因。。null 调试java

解决方案 »

  1.   

    好难呀     我就看到了  16个keyset
      

  2.   

       Map<String, EquipStatusRealData> equipStatusMap = new HashMap<String, EquipStatusRealData>();
    Map<String, MeasureData> dataMap = dalianRealtimeDataCache
            .getCachedRealDataMap(mnList);
    for (int i = 0; i < mnList.size(); i++) {
    String mn = mnList.get(i);
    MeasureData mdata = dataMap.get(mn);
    // 判断是否存在实时数据
    if (mdata != null && mdata.getValues() != null) {
    EquipStatusRealData data = new EquipStatusRealData();
                    // 下面这行mdata.getValues().get("G01")!=null出错了
                    //但是改成!(mdata.getValues().get("G01")==null) 就没有问题,a!=null 和!(a==null)有区别么,为什么会出错?
    if(mdata.getValues().get("G01")!=null|| mdata.getValues().get("G02")==null)){
    data.setLongitude(mdata.getValues().get("G01"));
    data.setLatitude(mdata.getValues().get("G02"));
    }
    List<AlarmData> alarmDataList = alarmDataCache.getAlarmData(mn);
    if (alarmDataList != null && alarmDataList.size() > 0) {
    // 获取设备的最新一条超标数据
    AlarmData alarmData = alarmDataList.get(alarmDataList
            .size() - 1);
    data.setAlarmType(alarmData.getAlarmType());
    } else {
    data.setAlarmType(0);// 无超标数据
    }
    equipStatusMap.put(mn, data);
    }
    }
    return equipStatusMap;另附getValues方法
    public Map getValues() {
    Map originalValues = super.getValues();
    Map filterValues = new HashMap();
    if (originalValues == null)
        return filterValues;
    Iterator itr = originalValues.entrySet().iterator();
    while (itr.hasNext()) {
        Map.Entry next = (Map.Entry) itr.next();
        String key = (String) next.getKey();
        Float value = (Float) next.getValue();
        if (checkField(key))
    filterValues.put(key, value);
        else
    filterValues.put(key, Float.valueOf(Float.NaN));
    }
    return filterValues;
        }
      

  3.   

    用null != mdata.getValues().get("G01")