在界面中,我有以下内容:
{{1}}
在另一堂课中,我打电话给以下人员:
{{1}}
我的问题是,在编译期间,String常量的结果数组是否会被计算一次,或者每次循环迭代时都会计算它?
编辑:我刚注意到该方法没有意义,但它不会影响问题。
答案 0 :(得分:2)
我认为您指的是
的结果ParserI.and0xFFArray("포토".getBytes("UTF-8"))
除非您在某处明确地缓存/存储结果,否则每次调用它时都会计算它。
您可能需要考虑以下内容:
byte[] parserI = ParserI.and0xFFArray("포토".getBytes("UTF-8"));
while (true) {
...
if (isBeforeTerminator(htmlInput, parserI, '<'))
...
要理解为什么编译器不会自动实现此功能,请记住,您无法编写通用算法来检测特定方法是否始终返回与您快速相遇的相同值像Halting Problem这样的东西,所以你试图写这样的东西会非常复杂,甚至不会在很大的时间内工作。您还必须了解何时调用方法以制定合理的缓存策略。例如,在for
循环之后是否值得保留缓存?您必须了解相关程序结构的相当数量才能确定。
可能优化器可以识别出方法的结果在某些有限的情况下是不变的(并且我不确定Java优化器实际实现的程度) ,但在一般情况下你肯定不能指望它。确定这是否是其中之一的唯一方法是查看编译器生成的实际字节码,但我高度怀疑它是否像你一样聪明。我喜欢它,因为我上面列出的原因。如上所示,最好自己明确地进行缓存。