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

Java 变量引用问题

  •  
  •   LsLsLsLsLs 2024-03-29 16:42:00 +08:00 2146 次点击
    这是一个创建于 561 天前的主题,其中的信息可能已经有所发展或是发生改变。

    jdk 更新至今

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

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

    还是 int age=User.getAge()

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

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

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

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

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

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

    顺便问一下啥服务, 已经到了这点性能都要扣了?
    LsLsLsLsLs
        10
    LsLsLsLsLs  
    OP
       2024-03-29 17:42:18 +08:00
    @qinxi 太无聊了 扣一下细节
    zhouhu
        11
    zhouhu  
       2024-03-29 18:40:38 +08:00
    看字节码就知道了
    yuhongtai114514
        12
    yuhongtai114514  
       2024-03-29 19:01:18 +08:00 via iPhone
    没必要纠结,哪种可读性强,看着顺眼就用哪种
    prosgtsr
        13
    prosgtsr  
       2024-03-30 00:45:51 +08:00
    用可读性好的那一种。纠结那点性能不如换语言
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2663 人在线   最高记录 6679   &bsp;   Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 02:26 PVG 10:26 LAX 19:26 JFK 22:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86