Java 双/对象赢的实例';t工作:(

Java 双/对象赢的实例';t工作:(,java,instanceof,Java,Instanceof,我在java的instanceof上遇到了一个问题。下面是一个给我带来麻烦的代码缺口: LinkedList<Double> currentSummary = summary.getFirst().getQuantiles(); LinkedList currentSummary=summary.getFirst().getQuantiles(); …更多代码 while (!currentSummary.isEmpty()){ if (currentSumma

我在java的instanceof上遇到了一个问题。下面是一个给我带来麻烦的代码缺口:

LinkedList<Double> currentSummary = summary.getFirst().getQuantiles();
LinkedList currentSummary=summary.getFirst().getQuantiles();
…更多代码

while (!currentSummary.isEmpty()){

        if (currentSummary.getFirst() instanceof Double){
            orderedSummary.add(new ComparableWrapper<Double, Float>(currentSummary.removeFirst(), currentEpsilon));
        }
}
while(!currentSummary.isEmpty()){
if(currentSummary.getFirst()instanceof Double){
添加(新的ComparableWrapper(currentSummary.removeFirst(),currentEpsilon));
}
}
所以,我的问题是,if条件不会变为真。
currentSummary
中的那些元素要么是
null
要么是
Double
-值。我正试图拒绝
null
的元素。起初我只是添加了它们,后来因为一些(但不是全部!),我遇到了
NullPointerException
元素
null
currentSummary
的一个示例元素是[null,0.09861866469135272,10.137051035535745107.12083740100329,371.4371264801424827.432799545011206.251577083686]

有人知道为什么
instanceof
在这种情况下不起作用吗?我也用
currentSummary.getFirst()instanceof Object
试过了


提前感谢!

是否可能由于,双对象被解除绑定到原语
Double
,因此它们不是
Double
类的实例


如果是这种情况,那么检查非空元素会更好吗?

为什么不使用简单的空检查呢

if (currentSummary.getFirst() != null){ ... }

我假设您希望在每次迭代时删除第一个条目,以便遍历完整的列表。但是,只有当instanceof条件为true时才删除该条目。因此,当循环遇到第一个空值时,它似乎变得无限大(除非您删除部分代码,并且我们看不到完整的循环体)可以使用原始类型(
LinkedList
而不是
LinkedList
),将非
Double
项添加到
LinkedList
中。这些元素将无法通过
instanceof Double
测试。但这些项将通过
instanceof Object
测试。

我同意,但这并不能解释instanceof为非空值返回false的原因。这一开始似乎不起作用。但你是对的,这也行得通,而且看起来好多了;)谢谢你没有直接给出答案,但是既然你似乎没有从你的链表中删除
null
条目,这个东西会不会在它遇到的第一个
null
上无限循环?你能确保
getQuantiles()
一开始没有将
null
引用塞进你的列表吗?对象的
currentSummary.getFirst()实例的行为是否不同?你也可以尝试
currentSummary.getFirst().getClass()
来查看对象实际属于哪个类。不,它不是。但这根本不是问题所在。我只是忘记了删除第一个元素,如果它是空的。所以我遇到了一个无限循环…自动装箱和自动拆箱都不会发生在一个测试的实例中。好的,在我的地方肯定是暖和的。问题当然是无限循环-非常感谢:)