为什么使用 Long 时,大家推荐多使用 valueOf 方法,少使用 parseLong 方法

为什么使用 Long 时,大家推荐多使用 valueOf 方法,少使用 parseLong 方法

老师,您好!

题目是我看到的一个面试题,但是我看很多人说valueOf性能好像不如parseLong;我看源码的话,发现valueOf传入的参数是parseLong的返回值,具体怎么样,老师可以讲解一下吗

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,

1、这个用时谁快谁慢,并不是固定的。

2、调用的都是parseLong方法,但Long.ValueOf("String")返回Long包装类型 而Long.parseLong("String")返回long基本数据类型

http://img1.sycdn.imooc.com//climg/5f02fde709d5bade06770089.jpghttp://img1.sycdn.imooc.com//climg/5f02fdf209320fe706230104.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • mahsiaoko 提问者 #1
    就是说valueOf和parseLong的使用需要看具体情况吗?
    2020-07-06 20:31:02
  • 好帮手慕小脸 回复 提问者 mahsiaoko #2
    同学你好,可以这么理解哦~ 祝学习愉快~
    2020-07-07 09:49:30
好帮手慕小脸 2020-07-06 17:32:52

同学你好,因为Long本身有缓存机制,缓存了-128到127范围内的Long,valueOf方法会从缓存中去拿值,如果命中缓存,会减少资源的开销,parseLong方法没有这个机制。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 mahsiaoko #1
    String s = "100"; long beginTime = System.currentTimeMillis(); for (int i = 0; i < 100000000; i++) { Long.parseLong(s); } System.out.println("parseLong 耗时" + (System.currentTimeMillis() - beginTime)); long beginTime1 = System.currentTimeMillis(); for (int i = 0; i < 100000000; i++) { Long.valueOf(s); } System.out.println("valuOf 耗时" + (System.currentTimeMillis() - beginTime1)); 我使用上面的代码测试了一下,发现valueOf用时更长;还有; public static Long valueOf(String s) throws NumberFormatException { return Long.valueOf(parseLong(s, 10)); } 在源码中是这样写的,那Long.valueOf()不是得调用parseLong吗?
    2020-07-06 17:44:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师