zoukankan      html  css  js  c++  java
  • 一次NaN引发的npe

    # 先上代码

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    
    public class QQ {
    
        public static void main(String[] args) {
            double result = calcute() < 0 ? 0 : calcute();
            System.out.println(result);
            ResultBean resultBean = new ResultBean(result);
            System.out.println(resultBean.toString());
            // 如果再用resultBean.value进行计算,则你会发现出现一堆npe,而且你还不一定知道问题到底出在哪儿。。。
            JSONObject jsonObject = JSON.parseObject(resultBean.toString());
            System.out.println(jsonObject.get("value"));
        }
    
        public static double calcute() {
            Double temp1 = 1d;
            Double temp2 = 2d;
            double temp3 = temp1 - temp2;
            double temp4 = Math.sqrt(temp3);
            double result = ((temp1 + temp4) / temp2);
            return result;
        }
    }
    
    class ResultBean {
    
        private double value;
    
        public ResultBean(double value) {
            this.value = value;
        }
    
        public double getValue() {
            return value;
        }
    
        public void setValue(double value) {
            this.value = value;
        }
    
        public String toString() {
            Object result = JSON.toJSON(this);
            return result.toString();
        }
    
    }

    # 当然我只是把主要的逻辑提出来了,实际项目中还夹杂其他复杂的逻辑

    # 上面代码的结果是:

    NaN
    {"value":null}
    null

    #  可以看到 Java Bean 转 jsonStr 的时候,把NaN给抹去了,这就给后面出现 npe 再排查问题造成了很大的困难。。。。。

  • 相关阅读:
    scrapy-redis 分布式爬虫
    爬虫-框架-Scrapy
    MongoDB
    爬虫-请求库之-selenium
    通过位异或来交换a,b的值和通过中间变量交换a,b的值
    位运算
    sizeof运算符
    运算符和表达式(类型转换)
    为什么计算机存储的是二进制补码?
    各种进制的学习与转换
  • 原文地址:https://www.cnblogs.com/lwmp/p/11024664.html
Copyright © 2011-2022 走看看