Long类中parseLong和valueOf性能比对

最近在项目重构时遇到一个问题,大致是要将界面传回到后台的String类型的格式为yyyy-dd-mm HH:MM:ss的时间字符串转化成时间戳,然后再将时间戳转化成long类型,然后进行其他处理。在转化成long类型的时候,个人使用的Long.valueOf()方式处理的,但是在代码扫描的时候,提示我应当使用更为高效的Long.parseLong()来处理。改了之后就通过了扫描。个人在下班后作了一个比对,情况如下:

测试代码:

public class MyTest {
    public static void main(String[] args) {
        String str1 = "1593351482466";

        /**
         * 一次转化比对
          */
        // parseLong计时
        System.out.println("一次转换情况如下:");
        long sTime = System.currentTimeMillis();
        for (int i = 0; i < 1; i++) {
            long l2 = Long.parseLong(str1);
        }
        long eTime = System.currentTimeMillis();
        System.out.println("parseLong开始:"+(sTime));
        System.out.println("parseLong结束:"+(eTime));
        System.out.println("parseLong耗时"+(eTime - sTime));

        // valueOf计时
        long sTime1 = System.currentTimeMillis();
        for (int i = 0; i < 1; i++) {
            long l3 = Long.valueOf(str1);
        }
        long eTime1 = System.currentTimeMillis();
        System.out.println("valueOf开始:"+(sTime1));
        System.out.println("valueOf结束:"+(eTime1));
        System.out.println("valueOf耗时"+(eTime1 - sTime1));

        /**
         * 五次转化比对
         */
        // parseLong计时
        System.out.println("五次转换情况如下:");
        long sTime2 = System.currentTimeMillis();
        for (int i = 0; i < 5; i++) {
            long l4 = Long.parseLong(str1);
        }
        long eTime2 = System.currentTimeMillis();
        System.out.println("parseLong开始:"+(sTime2));
        System.out.println("parseLong结束:"+(eTime2));
        System.out.println("parseLong耗时"+(eTime2 - sTime2));

        // valueOf计时
        long sTime3 = System.currentTimeMillis();
        for (int i = 0; i < 5; i++) {
            long l5 = Long.valueOf(str1);
        }
        long eTime3 = System.currentTimeMillis();
        System.out.println("valueOf开始:"+(sTime3));
        System.out.println("valueOf结束:"+(eTime3));
        System.out.println("valueOf耗时"+(eTime3 - sTime3));

        /**
         * 五百次次转化比对
         */
        // parseLong计时
        System.out.println("五百次转换情况如下:");
        long sTime4 = System.currentTimeMillis();
        for (int i = 0; i < 500; i++) {
            long l4 = Long.parseLong(str1);
        }
        long eTime4 = System.currentTimeMillis();
        System.out.println("parseLong开始:"+(sTime4));
        System.out.println("parseLong结束:"+(eTime4));
        System.out.println("parseLong耗时"+(eTime4 - sTime4));

        // valueOf计时
        long sTime5 = System.currentTimeMillis();
        for (int i = 0; i < 500; i++) {
            long l5 = Long.valueOf(str1);
        }
        long eTime5 = System.currentTimeMillis();
        System.out.println("valueOf开始:"+(sTime5));
        System.out.println("valueOf结束:"+(eTime5));
        System.out.println("valueOf耗时"+(eTime5 - sTime5));

        /**
         * 五千次转化比对
         */
        // parseLong计时
        System.out.println("五千次转换情况如下:");
        long sTime6 = System.currentTimeMillis();
        for (int i = 0; i < 5000; i++) {
            long l4 = Long.parseLong(str1);
        }
        long eTime6 = System.currentTimeMillis();
        System.out.println("parseLong开始:"+(sTime6));
        System.out.println("parseLong结束:"+(eTime6));
        System.out.println("parseLong耗时"+(eTime6 - sTime6));

        // valueOf计时
        long sTime7 = System.currentTimeMillis();
        for (int i = 0; i < 5000; i++) {
            long l5 = Long.valueOf(str1);
        }
        long eTime7 = System.currentTimeMillis();
        System.out.println("valueOf开始:"+(sTime7));
        System.out.println("valueOf结束:"+(eTime7));
        System.out.println("valueOf耗时"+(eTime7 - sTime7));
    }
}

测试结果(多次执行后,发现结果并不是唯一确定的,但是发现多次执行结果中有一个共性,举其中一次执行执行结果分析):

一次转换情况如下:
parseLong开始:1593352178846
parseLong结束:1593352178846
parseLong耗时0
valueOf开始:1593352178871
valueOf结束:1593352178871
valueOf耗时0
五次转换情况如下:
parseLong开始:1593352178874
parseLong结束:1593352178874
parseLong耗时0
valueOf开始:1593352178876
valueOf结束:1593352178876
valueOf耗时0
五百次转换情况如下:
parseLong开始:1593352178878
parseLong结束:1593352178880
parseLong耗时2
valueOf开始:1593352178882
valueOf结束:1593352178883
valueOf耗时1
五千次转换情况如下:
parseLong开始:1593352178885
parseLong结束:1593352178890
parseLong耗时5
valueOf开始:1593352178892
valueOf结束:1593352178896
valueOf耗时4

Process finished with exit code 0

结果发现:
(1)当转化次数不是很多的情况下,parseLong和valueOf的耗时一样,比如1次和5次转化耗时均为0。
(2)当次数达到一定多的情况下,parseLong的转化效率要低于valueOf,比如500次和5000的时候,parseLong转化耗时分别为2和5,valueOf的转化耗时分别为1和4。
从上可知得出的结论并不是代码扫描时的结论,难道是个人的测试有问题?各位大佬有没有更好的测试方式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜间沐水人

文章编写不易,一分钱也是爱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值