我在scala repl中玩耍时发现:

scala> new java.util.HashMap[Long, Long]().get(1L)
res2: Long = 0


为什么返回该值? Java哈希映射应该针对缺少的键返回null。

最佳答案

寻找机制并不难。

scala> new java.util.HashMap[Long, Long]().get(1L)
res0: Long = 0

scala> :javap -prv -
Binary file res0 contains $line3.$read$$iw$$iw$
[snip]
        17: invokestatic  #30                 // Method scala/runtime/BoxesRunTime.boxToLong:(J)Ljava/lang/Long;
        20: invokevirtual #34                 // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
        23: invokestatic  #38                 // Method scala/runtime/BoxesRunTime.unboxToLong:(Ljava/lang/Object;)J




public static long unboxToLong(Object l) {
    return l == null ? 0 : ((java.lang.Long)l).longValue();
}

09-10 07:31
查看更多