說明:很多人有時候對於 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