Ofe*_*Ron 5 java optimization android
考虑以下 :
1.
for (final Bar a : bars) {
for (final Foo f : foos) {
doSomethingWith(f.foo(), a.bar());
}
}
Run Code Online (Sandbox Code Playgroud)
并且:
2.
for (final Bar a : bars) {
final Object bar = a.bar();
for (final Foo f : foos) {
doSomethingWith(f.foo(), bar);
}
}
Run Code Online (Sandbox Code Playgroud)
这种优化真的很有用,或者编译器会自动执行吗?
如果bar()是吸气剂,你的答案会改变吗?(例如getBar())
如果我的目标是Android开发,你的答案会改变吗?
我按照你针对你的问题所做的尝试了两个例子。在此基础上我必须说第二种方法会更好。(虽然我不考虑多线程)
测试.java
public class Test{
public static void main(String... args){
String[][] arr2 = new String[5][5];
for (final String[] obj : arr2)
{
for (final String str : obj)
System.out.println(str.length() +" " + obj.length);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译然后再次反编译后我得到了这个。
* Decompiled with CFR 0_114.
*/
import java.io.PrintStream;
public class Test {
public static /* varargs */ void main(String ... arrstring) {
String[][] arrstring2;
String[][] arrstring3 = arrstring2 = new String[5][5];
int n = arrstring3.length;
for (int i = 0; i < n; ++i) {
String[] arrstring4;
for (String string : arrstring4 = arrstring3[i]) { //assignment will take place m*n.
System.out.println("" + string.length() + " " + arrstring4.length);
//this arrstring4.length will execute m*n (in this case).So, this will less efficient than others.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试1.java
public class Test1{
public static void main(String... args){
String[][] arr2 = new String[5][5];
for (final String[] obj : arr2)
{
int value = obj.length;
for (final String str : obj)
System.out.println(str.length() +" " + value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译然后再次反编译后我得到了这个。
/*
* Decompiled with CFR 0_114.
*/
import java.io.PrintStream;
public class Test1 {
public static /* varargs */ void main(String ... arrstring) {
String[][] arrstring2;
for (String[] arrstring3 : arrstring2 = new String[5][5]) {
int n = arrstring3.length; //Assignment will take place M times only.
//this will calculate M times only. So, it will definitely faster than above.
for (String string : arrstring3) {
System.out.println("" + string.length() + " " + n);
//here n is calculate M times but can be printed M*N times.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |