【发布时间】:2015-09-01 15:12:12
【问题描述】:
如果我在代码中有这个语句/文字:
"foobar".length()
是否被编译器替换为6?或者它是否调用内部实例的方法?将这样的内容放在代码中而不是无意义的 6 中更具可读性,但我不想一遍又一遍地调用该方法,即使我知道它只是私有字段的一种 getter。
如果是,它是由某种 javac 白名单完成的,哪些方法在编译期间可以安全地评估哪些文字(或者可能是所有不带任何参数且不依赖于状态的方法来自环境(?))可能的副作用等等。
【问题讨论】:
-
你试过什么?您是否尝试读取编译器生成的中间代码?
-
不,我不会说字节码,只是在谷歌上搜索并没有找到答案...我有一个想法,用一些 for 循环创建一个基准,并将
System.out.println("foobar".length())与System.out.println(6)进行比较,但是变量太多了..其中之一是JIT(我知道我可以关掉它)...更容易问 -
我不会说字节码学习永远都不晚。