Java 中關於String 對象的空對象(null), 空值(""),空格(" ")對於很多人來說很模糊,下面將分別介紹一下他們的用法:定義,判斷,運算。
首先,先上代碼:
[java] view plain copy
- private void testStringNullOrEmpty() {
- // 如果s=null代表空對象,即還沒創建出對象,就是還沒開辟空間,。
- // 如果s = ""表示創建出了對象,但是這個對象內容為空,也就是空字符串。
- // 如果s = " "表示創建出了對象,但是這個對象內容為不為空,而是空格。
- String s = null;
- String k = "";
- String n = " ";
- String t = "ab";
- Log.d(TAG, "s = " + s); //output : s = null
- Log.d(TAG, "k = " + k); //output : k =
- Log.d(TAG, "t = " + t); //output : t = ab
- Log.d(TAG, "n = " + n); //output : n =
- Log.d(TAG, "t.length() = " + t.length()); //output : t.length() = 2
- Log.d(TAG, "k.length() = " + k.length()); //output : k.length() = 0
- Log.d(TAG, "n.length() = " + n.length()); //output : n.length() = 1
- //equals方法比較的是兩個對象的內容是否相同,因此,對象必須有指向的空間,即不能為null,否則,會拋出異常。
- Log.d(TAG, "k.equals(null) = " + k.equals(null)); //output : k.equals(null) = false
- Log.d(TAG, "k.equals(\"\") = " + k.equals("")); //output : k.equals("") = true
- Log.d(TAG, "k.equals(\" \") = " + k.equals(" ")); //output : k.equals(" ") = false
- Log.d(TAG, "n.equals(\"\") = " + n.equals("")); //output : n.equals("") = false
- Log.d(TAG, "n.equals(\" \") = " + n.equals(" ")); //output : n.equals(" ") = true
- // Log.d(TAG, "s.equals(null) = " + s.equals(null)); //異常
- Log.d(TAG, "k.isEmpty() = " + k.isEmpty()); //output : k.isEmpty() = true
- Log.d(TAG, "n.isEmpty() = " + n.isEmpty()); //output : n.isEmpty() = false
- // Log.d(TAG, "s.isEmpty() = " + s.isEmpty()); //異常
- Log.d(TAG, "s == null = " + (s == null)); //output : s == null = true
- // 在使用"+"操作符時,如果有一個操作數是字符串,其他操作數會被轉換成字符串
- s = s + t;
- Log.d(TAG, "after (s + t) s = " + s); //output : after (s + t) s = nullab
- Log.d(TAG, "s.length() = " + s.length()); //output : s.length() = 6
- Log.d(TAG, "s == null = " + (s == null)); //output : s == null = false
- }
定義
空對象:
String s = null;空對象是指定義一個對象s,但是沒有給該對象分配空間,即沒有實例化該對象,因此,空對象在調用所有對象方法時候都會拋出異常,如s.length(), s.isEmpty()等方法。
空值:
String k = "";空值是指一個字符床對象已經實例化,即系統已經給該變量分配了空間,只是對象的內容為空。
空格:
String n = " ";
是指一個字符對象已經實例化,對象的內容為空格。
判斷
對於上述三種情況,如何判斷一個字符變量屬於上述類型,下面主要介紹下方法:空對象判斷:
判斷一個字符變量是否是null ,使用 邏輯判斷 等於(==)與null對象比較,代碼表達式如下:s == null;
註意: 空對象不能使用諸如equals(), isEmpty()等對象方法,因為它未被實例化。
空值判斷:
判斷空值可有三種方式: (1)equals方法比較的是兩個對象的內容是否相同,可用表達語句:k.equals("") ;
(2) length()方法是查看某個字符串對象的字符個數,可用表達式判斷:k.length() == 0 ;
(3) isEmpty()方法是判斷某個字符串對象字符個數時候為0,可用表達式判斷:k.isEmpty() ;
空格判斷:
空格內容為一個空格,雖然在輸出顯示時候和空值一樣,都是空的,但是在系統裏面的內存機制不一樣的,空格字符串表示該對象的內存空間裏面有內容,是空格,字符個數是1,因此,在使用如下方法時候結果如下:
n.length() 的輸出值為1, n.isEmpty()輸出為false。
判斷語句: n.equals(" ") ;
運算
字符串提供了"+"操作符,表示兩個字符串對象可以鏈接一起,在使用該運算時候,有這樣一條規則:如果有一個操作數是字符串,其他操作數會被轉換成字符串。
在上面代碼s = s + t; s申明時候為空對象,通過"+"時,會將null轉化為一個字符串對象。因此結果是nullab。
大家可以對照上面代碼例子,更加詳細的了解這三者實現機制。
Tags:
文章來源: