Null 與 “” 的區別

[0]發表於2014-12-02

說明:很多人有時候對於 null 和 "" 不是很清楚,結合其他人的文章,今天做下解釋。

String str1 = null; str引用為空

String str2 = ""; str引用為空串 

說白了就是null沒有分配記憶體空間,而""分配了記憶體空間,因此str1還不是一個例項化的物件,而str2已經例項化。 

注意因為null不是物件,""是物件。

所以比較的時候必須是

 if(str1==null)
{....}if(str2.equals(""))
{....}

 

 記憶體地址比較用equals,null用等號比較。 

因此,如果str1=null;

下面的寫法錯誤:
if(str1.equals("")||str1==null)

{

//如果str1沒有值,則返回false

}

正確的寫法是 :

if(str1==null||str1.equals("")) { //先判斷是不是物件,如果是,再判斷是不是空字串 }

 

 

 String name = request.getParameter("name");

  if(filmname==null)

    {
       System.out.println("name ==null");  
  }  
else if (name.equals(""))
  {
   System.out.println("name.equals(\"\")");
  }

 

  控制檯輸出: name.equals("")

  說明request從表單中<input name="name">標籤中獲取預設空的值!=null,而是空字串。

 

//==與EQUEAL得區別如下:

//如下面的程式碼,執行過後,返回為false; 

public static void main(String[] str)

{

         String a = new String("123");

         String b = new String("123");

         System.out.println(a==b);

   }

 

//這是因為==比較的是兩個引用時是不是指向同一個記憶體地址,而equeals比較的是字面值。上面的new就產生了兩個不同的物件,那麼其記憶體地址肯定也就不同了。

 public static void main(String[] str)

{

                   String a = new String("123");

                   String b = new String("123");

                   System.out.println(a.equals(b));

}//返回為true

 

 

相關文章