找到原因了...
这样结果的原因是Long类型内部有一个内部类,维护了一个cache,见Long源码 552行
private static class LongCache {
    private LongCache(){}
 
    static final Long cache[] = new Long[-(-128) + 127 + 1];
 
    static {
        for(int i = 0; i < cache.length; i++)
        cache[i] = new Long(i - 128);
    }
    }
-128到127直接的值都放在cache里,不会创建新的对象,所以==比较的时候,结果是正确的,当超过这个范围,因为是创建的新对象,所以自然不会相等