当您使用Java进行开发已有15年并且同事要求您帮助他们调试空指针异常时,您不会感到惊讶。 通常,很明显什么是null,唯一要做的就是找出原因。

有时会有些困难,因为有人创建了一系列取消引用的对象。 前几天,我遇到了一些新东西,并感到困惑了一段时间。 用Java调试最简单的事情之一就是一时的神秘感。

考虑下面的代码,并告诉我空指针异常在哪里:

return value;

没错,NPE被抛出一个简单的return语句。

怎么会这样 没有明显的取消引用。 没有引用为空。 那句话很简单。 让我稍微扩展一下代码视图,以便您更好地了解发生了什么:

public int getValue(){return value;}

再一次,我们正在看非常简单的代码。 在上面的代码和文章标题中的提示之间,您可能已经知道发生了什么,或者您可能更加困惑。 再次没有明确地取消引用。 不仅我们甚至没有处理引用,它还返回一个原语。

您从线索中找出来了吗? 好的,这是其余的代码和说明:

package Example;
publicclass Example {Integer value;public int getValue(){return value;}
}

注意,value是一个以大写I表示的Integer,而getValue返回int。

在Java 5之前的过去,您会在上述代码上遇到编译错误。 但是Java 5引入了自动装箱 。 这个功能在我的Java职业生涯中已经存在了将近一半,并且从未使我感到困惑或困惑。 它一直是一个方便的功能。

自动装箱允许在基元及其等效的第一类对象之间进行无缝转换。 因此,您无需分配value.intValue即可获取原语,而只需分配值即可。 但是在幕后它仍然调用intValue方法。

那就是NPE发生的地方。 有问题的行变为:

return value.intValue();

在那条线上,很明显NPE发生在哪里。

哦,万一有人错过它,那么体育拳击运动就叫做Sweet Science。 我觉得自己被Autoboxing吸引住了,因此是本文的名称。

翻译自: https://www.javacodegeeks.com/2014/10/java-and-the-sweet-science.html

Java和甜蜜的科学相关推荐

  1. java 科学计数_Java和甜蜜的科学

    java 科学计数 当您使用Java进行开发已有15年之久,并且一位同事要求您帮助他们调试空指针异常时,您不会感到惊讶. 通常,很明显什么是null,唯一要做的就是找出原因. 有时会有些困难,因为有人 ...

  2. java实现多功能科学计算器(包括进制转换,三角函数,四则运算等)

    多功能科学计算器(包括进制转换,三角函数,四则运算等) Basic Framework calculator.java package myCalculator; import java.awt.*; ...

  3. 计算机课设:基于Java实现的简单科学计算器

    设计目的 对Java课程知识的总结,进一步提高对Java语言的理解与掌握 深入的理解Java语言,并将其中抽象概念运用到实际编程中,锻炼学生的课题分析和解决问题的能力,培养正确的编程习惯 培养自主学习 ...

  4. java 调用matlab rank_科学网—Matlab: X is rank deficient - 李旭的博文

    Summary 开贴讨论Rank deficient matrix线性回归之过程.示例数据包含在附件中,x is a matrix whose columns represent random var ...

  5. 使用Java解决您的数据科学问题

    Java offers versatility, interoperability, and the chance to zip around Europe in a red vespa. Data ...

  6. Java 科学计数法

    目录 Java 科学计数法 1 科学计数法的概念 1.1 有效数字 1.2 E记号 2 Java中的科学计数法 2.1 NumberFormat 2.2 DecimalFormat 2.3 BigDe ...

  7. 为什么我不建议你用阿里巴巴Java规范,而使用 Google Guava 编程?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来自 | 张丰哲 链接 | www.jianshu.com ...

  8. 别再用那些已经淘汰的技术了!2020 年 9 大顶级 Java 框架出炉!!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:Patricia Neil towardsdatascien ...

  9. 别再用那些已经淘汰的技术了!2020年9大顶级Java框架出炉!!

    作者:Patricia Neil https://towardsdatascience.com/9-top-java-frameworks-for-2020-1cc9d3c21f4c 诞生于1995年 ...

最新文章

  1. 关于大搜车「无线开发中心」团队
  2. 使用第三方工具覆写Object中方法
  3. 不是开发者也能玩得high!科大讯飞1024开发者节,看AI如何改变你的生活
  4. problem a: 简单的整数排序_什么是基数排序?
  5. Builder 模式
  6. php中mysql和mysqli_php mysqli中-和::有什么区别?
  7. 你真的知道 == 和 equals 的区别吗?
  8. 跳过人脸检测和关键点定位,Facebook等提出实时3D人脸姿态估计新方法
  9. WSL 1 运行 Ubuntu 20.04 将会出现问题
  10. 城市交通_ssl1636_floyd
  11. jquery里判断数组内是否包含了指定的值或元素的方法
  12. 使用Jmeter对API进行性能测试
  13. 解决办法:E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)
  14. l360清零软件无响应_爱普生L360清零软件
  15. coreldraw2022直装版下载 永久免费使用 附安装教程( 仅限 win 10 用户 )
  16. FANUC机器人:奇异点回避功能介绍与使用方法
  17. 2023前端面试题------JS 面试题(2) es6
  18. 2022年武汉市人工智能领域技术成果征集内容及申报条件
  19. Matlab -----求矩阵特征多项式和特征值
  20. python爬虫框架之scrapy安装与当当网爬虫实战

热门文章

  1. double类型进行比较排序
  2. oracle 更新参数,Oracle动态、静态参数参数修改规则
  3. Java Web开发与实战_Java Web开发技术与实战项目
  4. java国际化——资源包
  5. java泛型程序设计——约束与局限性
  6. Redis两种客户端:lettuce和Jedis的区别
  7. micrometer_具有InlfuxDB的Spring Boot和Micrometer第1部分:基础项目
  8. 如何使用java代码生成_使用Java成功生成代码的7个技巧
  9. jconsole 使用_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问
  10. 在硒中查找具有链接文本和部分链接文本的元素