我有这个代码:
package tests;
import java.util.Hashtable;
public class Tests {
public static void main(String[] args) {
Hashtable<String, Boolean> modifiedItems = new Hashtable<String, Boolean>();
System.out.println("TEST 1");
System.out.println(modifiedItems.get("item1")); // Prints null
System.out.println("TEST 2");
System.out.println(modifiedItems.get("item1") == null); // Prints true
System.out.println("TEST 3");
System.out.println(Boolean.valueOf(null)); // Prints false
System.out.println("TEST 4");
System.out.println(Boolean.valueOf(modifiedItems.get("item1"))); // Produces NullPointerException
System.out.println("FINISHED!"); // Never executed
}
}
我的问题是我不明白为什么 Test 3 可以正常工作(它打印false
并且不产生NullPointerException
),而 Test
4却
抛出了NullPointerException
。正如你可以看到测试 1 和 2
,null
和modifiedItems.get("item1")
是平等的和null
。
Java 7和8中的行为相同。
您必须仔细查看正在调用的重载:
Boolean.valueOf(null)
正在调用Boolean.valueOf(String)
。NPE
即使提供了null参数,也不会抛出“ even”。Boolean.valueOf(modifiedItems.get("item1"))
正在调用Boolean.valueOf(boolean)
,因为modifiedItems
的值类型为Boolean
,需要进行拆箱转换。既然modifiedItems.get("item1")
是null
,那就是该值的拆箱-而不是Boolean.valueOf(...)
-引发NPE。确定调用哪个重载的规则非常繁琐,但它们大致如下:
在第一遍中,搜索方法匹配项而不允许装箱/拆箱(也不使用可变Arity方法)。
null
是一个可接受的值String
而不是boolean
,在此过程中Boolean.valueOf(null)
匹配Boolean.valueOf(String)
;Boolean
是Boolean.valueOf(String)
或都不可接受的Boolean.valueOf(boolean)
,因此在此传递中没有方法匹配Boolean.valueOf(modifiedItems.get("item1"))
。在第二遍中,搜索方法匹配项,以允许装箱/拆箱(但仍然不是可变arity方法)。
Boolean
可以将A 拆箱boolean
,因此在此过程中Boolean.valueOf(boolean)
与匹配Boolean.valueOf(modifiedItems.get("item1"))
;但是编译器必须插入拆箱转换才能调用它:Boolean.valueOf(modifiedItems.get("item1").booleanValue())
我的服务等级代码如下: 我的测试课程如下: 在运行测试时,我在给出Mockito的那一行得到了NullPointerException。何时返回条件。我尝试了很多组合,但它仍然提供NPE。我甚至连方法调用都做不到。你能告诉我哪里出了问题吗?
问题内容: 我正在尝试为使用情况统计信息生成报告。以下是我在数组中存储的示例数据,这是从Mysql表中获取的。如何实现一个逻辑,即如果用户闲置超过30分钟,没有使用过系统,否则计算使用时间的平均时间。 问题答案: 我想这就是你想要的。它遍历列表,计算每个条目与上一个条目之间的差异。如果差异大于或等于30分钟,它将忽略它。如果少于30分钟,则会将其添加到该用户的总使用量中。(我假设所有时间戳都是针对
下面的错误会不时弹出,但并不总是在同一个地方。不太清楚为什么。有线索吗?这里的完整代码:完整代码 文件“/users/davidkasapchuk/pycharmprojects/test/homedepotfridges.py”,第257行,在price=item.find_element_by_class_name('product-display-price')文件“/library/fra
问题内容: 在我用Swift编写的SpriteKit iOS游戏中,播放非常短的声音(约0.5秒)会产生打ic(如滞后)。在其他问题中,我读到我应该发出声音,就像以前那样。 我什至使用变量()在播放之前检查声音是否准备就绪。每当播放完()时,我也会重新准备声音。以下是代码的相关部分: 我不知道我在哪里犯了错误。我感觉我已经尝试了所有方法(包括但不限于:仅准备一次,在播放后立即准备,不使用变量,而只
我必须在一个学校项目的“slice”对象上实现一个快速排序算法,该slice对象是一个具有: “数据”字段(要排序的整个数组) “左”和“右”字段(表示数组中切片子部分的索引) 分区函数代码如下: 该函数的doctests不会失败,但是当调用quicksort递归函数时,分区函数的行为不会像预期的那样。quicksort函数的代码如下: 编辑:正如下面的一条评论所指出的,我简直忘了更新piv的值,
问题内容: 最近,我按照这篇文章的建议删除了项目中的所有scriptlet 。但是现在,如果我尝试更改其中一个视图,则会收到deferredExpression错误。为了摆脱错误,我只需要终止,然后重新启动项目即可。 这里发生了什么?eclipse是否无法即时编译jstl?有什么我可以更改的,所以我不必每次进行更改都重新部署吗? 堆栈跟踪 问题答案: java.lang.NoSuchFieldEr