V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LsLsLsLsLs
V2EX  ›  Java

Java 变量引用问题

  •  
  •   LsLsLsLsLs · 230 天前 · 1696 次点击
    这是一个创建于 230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    jdk 更新至今

    假如代码里有多次调用 User.getAge()这个方法吧

    是用 User.getAge() 直接作为调用比较好呢

    还是 int age=User.getAge()

    然后在各种行去用 age 比价好呢

    有性能区别吗 还是 jdk 某个更新 会优化了以上写法

    13 条回复    2024-03-30 00:45:51 +08:00
    chendy
        1
    chendy  
       230 天前
    有性能区别,但是小到可以忽略不计
    爱怎么写怎么写…
    weiweiwitch
        2
    weiweiwitch  
       230 天前
    多线程环境,或者 age 值实时从数据库中获取到的。那么这两种写法区别很大。要想清楚再选择。
    oneisall8955
        3
    oneisall8955  
       230 天前
    性能影响非常小,代码风格问题,都是 O(1)
    BBCCBB
        4
    BBCCBB  
       230 天前
    第二种好. 特别是多处调用, 变量名又长的时候,

    xxxxxxxxyyyyyyyyy.getAge()
    xxxxxxxxyyyyyyyyy.getAge()
    xxxxxxxxyyyyyyyyy.getAge()
    xxxxxxxxyyyyyyyyy.getAge()
    me1onsoda
        5
    me1onsoda  
       230 天前
    你不妨看看编译后汇编是啥样的
    unco020511
        6
    unco020511  
       230 天前
    java 开发还在纠结哪种写法好,其它语言的开发已经把业务实现下班了
    xloger
        7
    xloger  
       230 天前
    这不止是性能区别吧,这两个的语义都不一样。
    1:
    print(User.getAge())
    print(User.getAge())
    2 、
    int age=User.getAge()
    print(age)
    print(age)

    第一种是获取两次 age 的值并打印;第二种是获取一次 age 的值,然后用这个常量去做某些事。
    用哪种写法是取决于你业务本身希望实时比较,还是得到一次值就可以了。

    再提性能问题,JDK 没法优化第一种写法啊,它哪能判断出来你会不会在某个地方开个线程调用 User.setAge
    kristofer
        8
    kristofer  
       230 天前
    别纠结这点事了,去码头整点薯条🍟
    qinxi
        9
    qinxi  
       230 天前
    从字节码角度, 重新定义变量比直接调用多了 ASTORE x 和 ALOAD x 的. 我猜虚拟机在执行的时候是可以优化到的.
    即便是没有优化, 这个也可以忽略.
    当然在写的时候, 如果同一代码块多次使用类似 User.getAge(), 重新定义一个变量应该会提高一定可读性,

    顺便问一下啥服务, 已经到了这点性能都要扣了?
    LsLsLsLsLs
        10
    LsLsLsLsLs  
    OP
       230 天前
    @qinxi 太无聊了 扣一下细节
    zhouhu
        11
    zhouhu  
       230 天前
    看字节码就知道了
    yuhongtai114514
        12
    yuhongtai114514  
       230 天前 via iPhone
    没必要纠结,哪种可读性强,看着顺眼就用哪种
    prosgtsr
        13
    prosgtsr  
       229 天前
    用可读性好的那一种。纠结那点性能不如换语言
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1894 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:31 · PVG 00:31 · LAX 08:31 · JFK 11:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.