【发布时间】:2013-09-10 19:19:09
【问题描述】:
从 String 类的代码中,我可以看到 length() 返回 value.length (here)。
假设我想打印字符串的长度 str length() 次数。
Q1)从以下代码sn-ps中更好的方法是什么:(如果您有更好的方法,请提出)
代码 1:
public static void main(String[] args) {
String str="Hello World";
for(int i=0;i<str.length();++i){
System.out.println(str.length());
}
}
代码 2(我更喜欢这一个原因,因为它为程序提供了可读性...)
public static void main(String[] args) {
String str="Hello World";
final int len=str.length();
for(int i=0;i<len;++i){
System.out.println(len);
}
}
代码 3:
public static void main(String[] args) {
String str="Hello World";
int len=str.length();
for(int i=0;i<len;++i){
System.out.println(len);
}
}
Q2) 哪种方式最优化或者它们是否相同?
Q3) 编译器是否在为该程序生成的字节码中内联长度?
谢谢!
【问题讨论】:
-
对于这样一个小程序,你可以编译程序并查看字节码。按照 wiki 文章了解字节码说明。 JVM 是另一回事。
-
我不明白你要做什么...为什么要打印出
str的长度 11 次? -
调用
length()所花费的时间与打印结果所花费的时间相比可以忽略不计。 -
只要遵循这些简单的规则:程序优化的第一条规则:不要这样做。程序优化的第二条规则(仅限专家!):不要这样做。
-
@boxed__l 这两者有些不同,因为通过分解
length()调用,您允许编译器用并行索引替换模除法,它会这样做。在这里,分解length()调用只会消除一个减法运算,它甚至不如除法那么密集。 (如果没有实际的性能测试表明这是必要的,他们也不应该这样做。)
标签: java