Long的比较要用equals而不要用==

 

当Long为常量且常量值小于一个字节(<=127)时,两个Long指向同一个常量内容;

        Long userId=127L;
        Long authorId=127L; 
        System.out.println(userId==authorId);//true

当Long为常量且常量值大于一个字节(>127)时,两个Long指向不同的常量内容。

        Long userId=128L;
        Long authorId=128L;
        System.out.println(userId==authorId);//false

当Long是引用类型时,比较两个Long的大小,一定要用equals而不能用==

        Long x=new Long(18);
        Long y=new Long(18);
        System.out.println(x==y);//false
        System.out.println(x.equals(y));//true

 

原因:Java 基本类型的包装类的大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character;这5种包装类默认创建了数值[-128,127]的相应类型的缓存数据,但是超出此范围仍然会去创建新的对象。

 

转载于:https://www.cnblogs.com/wenhui92/p/6811825.html

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐