这是一个比较容易混淆的概念,为了弄清楚这个问题,最好的方法当然是写程序来验证,上代码吧:

 


  1.  *  
  2.  */ 
  3. package JavaTest; 
  4.  
  5. /** 
  6.  * @author wxwevenpc 
  7.  * @version 1.0 2012-11-25 
  8.  */ 
  9. public class TestNull { 
  10.  
  11.     /** 
  12.      * @param args 
  13.      */ 
  14.     public static void main(String[] args) { 
  15.         String a = new String(); 
  16.         String b = ""
  17.         String c = null
  18.         if(a.isEmpty()) 
  19.         { 
  20.          System.out.println("String a = new String"); 
  21.         } 
  22.         if(b.isEmpty()) 
  23.         { 
  24.          System.out.println("String b = \"\""); 
  25.         } 
  26.         if(c==null
  27.         { 
  28.          System.out.println("String c =null"); 
  29.         } 
  30.         if(null == a) { 
  31.             System.out.println("String a =null"); 
  32.         } 
  33.         if(a==""
  34.         { 
  35.          System.out.println("a = ''"); 
  36.         } 
  37.     } 
  38.  
  39.  }

 以上输出:

 

  1. String a = new String 
  2. String b = "" 
  3. String c =null 
  4.  
  1. 分析:

  1. 此时a是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已) 
  2. 此时b是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串) 
  3. 此时c是未分配内存空间,无值,是一种无值(值不存在)