美文网首页
Java中Long类型相等对比性能分析

Java中Long类型相等对比性能分析

作者: 走码人 | 来源:发表于2023-10-12 14:59 被阅读0次

    Long 相等对比分析

    四种对比方案

    小于128L可以直接用==判断,存在风险不建议直接使用==

        Long a = 200L;
            Long b = 200L;
            System.out.println(a.equals(b));
            System.out.println(a.longValue()==b.longValue());
            System.out.println(a-b==0);
            System.out.println(a.compareTo(b) == 0);
    
    

    检测项目代码时发现了另外的一种写法

    oneBigNum.toString().equals(twoBigNum.toString()
    

    一时兴起,对性能进行了一下测试(有点孔乙己的感觉)

    package org.example;
    
    public class Main {
        public static void main(String[] args) {
            Long oneNum=100L;
            Long twoNum=100L;
            Long oneCommNum127=127L;
            Long twoCommNum127=127L;
    
            Long oneCommNum128=128L;
            Long twoCommNum128=128L;
            Long oneBigNum=10000L;
            Long twoBigNum=10000L;
    
            int times=100*100*10000;
    
            System.out.println("equals times---> "+times);
    
            long t1=System.currentTimeMillis();
            for (int i=0;i<times;i++){
                boolean a=oneBigNum.equals(twoBigNum);
            }
            long t2=System.currentTimeMillis();
    
            System.out.println("oneBigNum.equals(twoBigNum)--耗时---> "+(t2-t1));
            t1=System.currentTimeMillis();
            for (int i=0;i<times;i++){
                boolean a=oneBigNum.toString().equals(twoBigNum.toString());
            }
            t2=System.currentTimeMillis();
    
            System.out.println("oneBigNum.toString().equals(twoBigNum.toString())--耗时---> "+(t2-t1));
    
            t1=System.currentTimeMillis();
            for (int i=0;i<times;i++){
                boolean a=oneBigNum.longValue()==twoBigNum.longValue();
            }
            t2=System.currentTimeMillis();
    
            System.out.println("oneBigNum.longValue()==twoBigNum.longValue()--耗时---> "+(t2-t1));
    
            t1=System.currentTimeMillis();
            for (int i=0;i<times;i++){
                boolean a=0==oneBigNum-twoBigNum;
            }
            t2=System.currentTimeMillis();
    
            System.out.println("0==oneBigNum-twoBigNum--耗时---> "+(t2-t1));
    
            t1=System.currentTimeMillis();
            for (int i=0;i<times;i++){
                boolean a=0==oneBigNum.compareTo(twoBigNum);
            }
            t2=System.currentTimeMillis();
    
            System.out.println("oneBigNum.compareTo(twoBigNum)--耗时---> "+(t2-t1));
        }
    }
    

    输出

    equals times---> 100000000
    oneBigNum.equals(twoBigNum)--耗时---> 6
    oneBigNum.toString().equals(twoBigNum.toString())--耗时---> 6005
    oneBigNum.longValue()==twoBigNum.longValue()--耗时---> 4
    0==oneBigNum-twoBigNum--耗时---> 4
    oneBigNum.compareTo(twoBigNum)--耗时---> 4
    

    总结

    包装类已经提供了equals方法尽量采用其提供的方法进行相等对比

    相关文章

      网友评论

          本文标题:Java中Long类型相等对比性能分析

          本文链接:https://www.haomeiwen.com/subject/fjcobdtx.html