1,for循环外部创建引用对象,并且引用完 将其指向null ==》 t = new Integer(i); t = null;
package com.skindow.forInterface;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2019/7/30.
*/
public class ForImpl_forTest_3 implements For{
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
private Integer size;
public ForImpl_forTest_3(){}
public ForImpl_forTest_3(Integer size)
{
this.size = size;
}
@Override
public void doSomething() {
List<Integer> list = new ArrayList<>();
Integer t = null;
System.out.println("for循环外部创建引用对象,并且引用完 将其指向null ==》 t = new Integer(i); t = null;");
for (Integer i = 0; i < size; i++)
{
t = new Integer(i);
list.add(t);
t = null;
}
}
}
2,for循环内部循环创建引用对象 -》 Integer t = new Integer(i);
package com.skindow.forInterface;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2019/7/30.
*/
public class ForImpl_forTest_4 implements For{
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
private Integer size;
public ForImpl_forTest_4(){}
public ForImpl_forTest_4(Integer size)
{
this.size = size;
}
@Override
public void doSomething() {
System.out.println("for循环内部循环创建引用对象 -》 Integer t = new Integer(i);");
List<Integer> list = new ArrayList<>();
for (Integer i = 0; i < size; i++)
{
Integer t = new Integer(i);
list.add(t);
}
}
}
3,循环外部创建引用对象 ==》t = new Integer(i);
package com.skindow.forInterface;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2019/7/30.
*/
public class ForImpl_forTest_5 implements For{
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
private Integer size;
public ForImpl_forTest_5(){}
public ForImpl_forTest_5(Integer size)
{
this.size = size;
}
@Override
public void doSomething() {
List<Integer> list = new ArrayList<>();
Integer t = null;
System.out.println("循环外部创建引用对象 ==》t = new Integer(i);");
for (Integer i = 0; i < size; i++)
{
t = new Integer(i);
list.add(t);
}
}
}
测试结果(测试方式采用动态代理,请参考jdk和cglib动态代理计算执行方法的时间)
总结
耗时对比 根据副级标题对应对应的写法 为 3>2>1
- 总体来说第1种写法性能更优异但是结合3和2的对比所以建议在第二种写法上,引用对象的创建放在循环内部比较好
- 3和1对比 10次对比结果有7次是3花的时间要比2多,所以这两者写法从目前来看没有明显的性能查询,所以关于上点的差异有待商榷
- 不过将循环次数增多还是能看出差异的如下 能看到第三种写法性能更优异,所以建议for循环较大时推介该种写法。
- 个人还是推崇第1种写法