EL Collection#contains 不工作

EL Collection#contains not working

我正在 Spring、JSP、Tomcat 环境中使用 servlet 版本 3.0。我正在尝试使用 Collection#contains 方法(据我所知已添加到 servlet 3.0)。它似乎不起作用,在调试过程中,我想出了以下奇怪的案例,似乎可以查明问题所在:

${priority[0] == 1}
${priority[0] eq 1}
${priority.contains(priority[0])}
${priority.contains(1)}

这打印出来

true true true false

此外,priority 是一个包含整数 1,2,3List<Integer>

所以,问题是,how/why 最后一张支票是否打印 false

编辑以回应评论:是的,当从 Intellij 调试器中调用时,列表包含 1

我写了一个小class:

public static class Test {
    public String contains(Object value) {
        return value.getClass().toString();
    }
}

将其添加为名为 test 的 JSP 属性,然后:

${test.contains(1)}

生成:

class java.lang.Long

Long 不是 Integer,因此在 List<Integer> 中找不到。


更新

以下是 运行 在 Tomcat 8 上的,在旧版本上不会按原样工作,但可以说明非浮点文字是 Long ,不是 Integer(浮点文字是 Double),但是 == 仍然进行数值比较,所以 Long value == Integer value 有效正确。

${test.contains(1)}
${test.contains(Long.valueOf('1'))}
${test.contains(Integer.valueOf('1'))}
${Long.valueOf('1') == Integer.valueOf('1')}

生成:

class java.lang.Long
class java.lang.Long
class java.lang.Integer
true