jdk 更新至今
假如代码里有多次调用 User.getAge()这个方法吧
是用 User.getAge() 直接作为调用比较好呢
还是 int age=User.getAge()
然后在各种行去用 age 比价好呢
有性能区别吗 还是 jdk 某个更新 会优化了以上写法
![]() | 1 chendy 2024-03-29 16:43:50 +08:00 有性能区别,但是小到可以忽略不计 爱怎么写怎么写… |
![]() | 2 weiweiwitch 2024-03-29 16:54:40 +08:00 多线程环境,或者 age 值实时从数据库中获取到的。那么这两种写法区别很大。要想清楚再选择。 |
![]() | 3 itechify PRO 性能影响非常小,代码风格问题,都是 O(1) |
![]() | 4 BBCCBB 2024-03-29 17:03:42 +08:00 第二种好. 特别是多处调用, 变量名又长的时候, xxxxxxxxyyyyyyyyy.getAge() xxxxxxxxyyyyyyyyy.getAge() xxxxxxxxyyyyyyyyy.getAge() xxxxxxxxyyyyyyyyy.getAge() |
![]() | 5 me1onsoda 2024-03-29 17:17:22 +08:00 你不妨看看编译后汇编是啥样的 |
![]() | 6 unco020511 2024-03-29 17:19:37 +08:00 java 开发还在纠结哪种写法好,其它语言的开发已经把业务实现下班了 |
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 |
8 kristofer 2024-03-29 17:31:54 +08:00 别纠结这点事了,去码头整点薯条 |
![]() | 9 qinxi 2024-03-29 17:37:39 +08:00 从字节码角度, 重新定义变量比直接调用多了 ASTORE x 和 ALOAD x 的. 我猜虚拟机在执行的时候是可以优化到的. 即便是没有优化, 这个也可以忽略. 当然在写的时候, 如果同一代码块多次使用类似 User.getAge(), 重新定义一个变量应该会提高一定可读性, 顺便问一下啥服务, 已经到了这点性能都要扣了? |
![]() | 10 LsLsLsLsLs OP @qinxi 太无聊了 扣一下细节 |
11 zhouhu 2024-03-29 18:40:38 +08:00 看字节码就知道了 |
![]() | 12 yuhongtai114514 2024-03-29 19:01:18 +08:00 via iPhone 没必要纠结,哪种可读性强,看着顺眼就用哪种 |
13 prosgtsr 2024-03-30 00:45:51 +08:00 用可读性好的那一种。纠结那点性能不如换语言 |