(1)
for (int i = 0; i < 10000; ++i) { Object obj = new Object(); System.out.println("obj= "+ obj); }
(2)
Object obj = null; for (int i = 0; i < 10000; ++i) { obj = new Object(); System.out.println("obj= "+ obj); }
在循環體外,始終都是這一個對象,循環放入的都是最新的值。
在循環體內,創建的是不同的對象,每次放入的對應這不同值的對象。
將變量聲明在循環體外的方式多少能節省點空間,可是帶來的變量聲明周期變長,回收時間推后以及更加嚴重的隱性bug危險等問題很多。比較而言,有些得不償失了。
將對象的值賦值為null,相當於把對象的引用清除掉,即把引用對象的指針kill掉,再使用集合就會報空指針異常;
調用集合的clear()方法,是把集合內部的對象都清空,而集合的引用還存在。
for (int i = 0; i < 10000; ++i) {
Object obj = new Object();
System.out.println("obj= "+ obj);
}
應改成
(2)
Object obj = null;
for (int i = 0; i < 10000; ++i) {
obj = new Object();
System.out.println("obj= "+ obj);
}