如何进一步优化这段代码。 如果可能的话,请提出我应该记住的内容。
public void funct(String str, int[] arr) {
String temp = "saved";
for (int i = 0; i < arr.length; i++) {
if (str.equals(temp) && arr[i] * 2 > 10) {
Integer num = new Integer(arr[i]);
num = num * 2;
System.out.print(num.toString());
}
}
}
谢谢
答案 0 :(得分:4)
您的代码没有多大意义,例如并非真正需要str
和temp
。因此优化它们的第一步是删除它们...也使用int
,而不是Integer
:
public void funct(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 5) {
System.out.print(arr[i] * 2);
}
}
}
如果你关心代码简洁:
public void funct(int[] arr) {
for(int i: arr) {
if (i > 5) {
System.out.print(i * 2);
}
}
}
答案 1 :(得分:3)
两个观察结果:
Integer
对象替换为int
。str.equals(temp)
检查。为什么不在if(str.equals(temp))
内完成整个循环?答案 2 :(得分:0)
请注意,由于溢出,表达式arr[i] * 2 > 10
实际上等同于(arr[i] > 5 && arr[i] < 1073741824) || (arr[i] > -2147483643 && arr[i] < -1073741824)
,这可能不是您想要的,但为了以防万一,建议的arr[i] > 5
优化是不是语义保留。
答案 3 :(得分:0)
如果您真的关心字符串比较,那么您的代码可以写成如下。
public void funct(String str, int[] arr)
{
if (!str.equals("saved"))
return; //just return if String value is not "saved", reduces the loop execution.
for(int i: arr) {
if (i>5)
System.out.println(""+(i<<1)); //Left shift is faster than multiplication. Concatenation is just for printing as SOP will not print integers directly.
}
}
希望这有帮助。