今天在刷算法題時,新建了ArrayList變量,發現ArrayList與null結合起來使用時經常出錯。
請查看如下幾種例子,
1、new一個ArrayList<>類型的數據,
1 import java.util.ArrayList; 2 3 public class Test 4 { 5 6 @SuppressWarnings("unused") 7 public static void main(String[] args) 8 { 9 ArrayList<Integer> al=new ArrayList<Integer>(); 10 //al.add(null); 11 //al=null; 12 if (al==null) 13 { 14 System.out.println("al==null"); 15 } 16 17 if (al.isEmpty()) 18 { 19 System.out.println("al is Empty"); 20 } 21 22 23 System.out.println("al.size(): "+al.size()); 24 25 System.out.println("al.get(0): "+al.get(0)); 26 al.add(5); 27 al.add(4); 28 } 29 }
2、將ArrayList<>變量置為null
1 import java.util.ArrayList; 2 3 public class Test 4 { 5 6 @SuppressWarnings("unused") 7 public static void main(String[] args) 8 { 9 ArrayList<Integer> al=null; 10 //al.add(null); 11 //al=null; 12 if (al==null) 13 { 14 System.out.println("al==null"); 15 } 16 17 if (al.isEmpty()) 18 { 19 System.out.println("al is Empty"); 20 } 21 22 23 System.out.println("al.size(): "+al.size()); 24 25 System.out.println("al.get(0): "+al.get(0)); 26 al.add(5); 27 al.add(4); 28 } 29 }
通過這兩個例子,可以看出list==null和用new新建出的arrayList<>是不同的。以至於調用list.size()也會有所不同。
在此加深一下null的認識:
null是沒有地址的;
B b=new B();
這是b指向B對象。
b=null;
b指向空。
在此說明一下list!=null和list.size()的區別:
1、list==null,意味着list壓根沒有地址,在堆內就不存在,說明其沒有進行初始化,這時llist調用任何方法都會拋出空異常。
2、list.size()=0,意味着堆內有list,但是還沒來得及放元素,其長度隨着元素數量變化而變化,暫時為零。