Java 变量引用问题

274 天前
 LsLsLsLsLs

jdk 更新至今

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

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

还是 int age=User.getAge()

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

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

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

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

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

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

顺便问一下啥服务, 已经到了这点性能都要扣了?
LsLsLsLsLs
274 天前
@qinxi 太无聊了 扣一下细节
zhouhu
274 天前
看字节码就知道了
yuhongtai114514
274 天前
没必要纠结,哪种可读性强,看着顺眼就用哪种
prosgtsr
273 天前
用可读性好的那一种。纠结那点性能不如换语言

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1028177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX