请确认两个代码中的哪一个是有效的a或b。其中string在循环内部或外部循环中定义。 请注意。
a)
for(int i=0;i<configIndexNumber.size();i++){
ConfigurationDetailsObject oldIndex =(ConfigurationDetailsObject)configIndexNumber.get(i);
String Key = oldIndex.getVehConfigNo()+oldIndex.getBaseEngineKey()+oldIndex.getEngineCode()+oldIndex.getTestGroupId()+oldIndex.getTransConfig()+oldIndex.getInertiaWeightClassNo()+oldIndex.getAxleRatioValue();
if(!configIdxNnb.containsKey(Key))
{
newConfigIndexList.add(oldIndex);
configIdxNnb.put(Key,oldIndex);
}
}
b)中
String Key=null;
for(int i=0;i<configIndexNumber.size();i++){
ConfigurationDetailsObject oldIndex =(ConfigurationDetailsObject)configIndexNumber.get(i);
Key = oldIndex.getVehConfigNo()+oldIndex.getBaseEngineKey()+oldIndex.getEngineCode()+oldIndex.getTestGroupId()+oldIndex.getTransConfig()+oldIndex.getInertiaWeightClassNo()+oldIndex.getAxleRatioValue();
if(!configIdxNnb.containsKey(Key))
{
newConfigIndexList.add(oldIndex);
configIdxNnb.put(Key,oldIndex);
}
}
答案 0 :(得分:1)
这两种情况没有区别。在这两种情况下,您都要为String变量赋值。
我知道你有什么优化。如今,这种优化通常由编译器完成。但同样,它无论如何都不适用于您的情况。
答案 1 :(得分:0)
内存方面会有细微差别。 JVM足以智能管理。
但是你应该在所需的最小范围内声明一个变量。即第一个案例对我来说很好。
我不记得来自efffective java的确切引用,它类似于
当我们使用尽可能小的范围时,垃圾收集器会做得最好。
但是如果你想在循环之外访问那个变量,那么第二个就是选项。
答案 2 :(得分:0)
与C ++不同,本地变量不需要在使用它的范围之前在java中单独初始化。所以不需要初始化
String Key = null
在使用之前。仅在使用局部变量时初始化局部变量是一种更好的编程习惯。从某种意义上说,只有在for循环中使用它时,才能为堆中的变量分配内存。
请参阅oracle文档以更好地理解变量初始化
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
答案 3 :(得分:0)
在效率方面无关紧要,但(a)在两者中更好 - 代码可读性在最小可能范围内定义变量更好。
答案 4 :(得分:0)
执行时间与执行时间差异很小/可忽略不计 2 ...编译器优化你的代码......
public class Test
{
public static void main(String[] args) {
long l = System.nanoTime();
func1("hi");
System.out.println(System.nanoTime()-l);
long l1 = System.nanoTime();
func2("hi");
System.out.println(System.nanoTime()-l1);
}
public static void func1(String str)
{
for(int i=0;i<10000;i++)
{
String s= str ;
// System.out.println(s);
}
}
public static void func2(String str)
{String s= null;
for(int i=0;i<10000;i++)
{
s= str ;
// System.out.println(s);
}
}
}
O/p :
1. 277530
265557
2. 267694
243747