首先這個項目需要把從數據庫中的一條記錄的多列內容,去掉1兩個內容後和另外一張表中去對應,我想到的就是利用數組來解決這個問題,可是如何把一條記錄中的多列變成一個數組就讓人爲難了。突然想到可以在實體中重寫string方法,然後通過字符串的String.split(",")就可以變成了一個數組。問題就是從這兒開始的。 數據庫中的數據有可能爲空呀,查出來的結果就是爲空,也沒有分配值空間,可是在調用split後,發現數組中原來對應爲null,突然變成不是null而是“null”,這個對於判斷爲空就出現了差別。
String isEmpty()方法也是判斷字符串爲空的方法,通過value.length()==0判斷是否爲空。但是我們一般做項目的時候都會自己寫工具類,主要就是這個方法對於一些特殊的情況沒有判斷,比如String a=null就無法通過這個方法判斷。這個方法和JDK版本有關,1.6及以後的版本才生效,所以不建議在項目中使用,以免造成兼容性問題。
public static void main(String args[]) {
String a = null;
String b = new String();
String c = "";
String d = "" + a + "+hello";
if (c.equals(b)) {
System.out.println("c.equals(b)");
}
if (c == b) {
System.out.println("c==b");
}
System.out.println(a);// a未分配空間,無值狀態。輸出也是特殊處理的結果
System.out.println(b);// b分配空間,有值狀態,是一種絕對的空
System.out.println(c);// c分配空間,有值狀態,是一種相對的空,空字串
System.out.println(d);// StringBuilder.append的一個特殊處理
System.out.println(a.length());// 沒有分配內存,所以報空指針的異常
}
運行結果下所示:
c.equals(b)
null
null+hello
Exception in thread "main" java.lang.NullPointerException
at com.util.Handle.main(Handle.java:28)
a和b並不相等,一個是有值的狀態,一個是無值的狀態。b與c也不相等,一種是絕對的空一種是相對的空,但是b與c已經基本相等。f是通過new String(),b爲“”。對於a的輸出是經過特殊處理過後的才能輸出。處理的方法如下:
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
b、c爲空輸出字符串自然是什麼都沒有。d這個是因爲在執行+的時候,經過特殊的處理。 public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
對於String類型的空我們一般分的比較清楚,如還有問題可參考第一篇參考的博客。對於String a = null;String d=""+a+"+hello"的理解不透徹可以參考第二篇參考的博客。
參考以下兩個博客: JAVA中isEmpty和null以及""的區別 http://blog.csdn.net/lhflower123/article/details/8223607
由一個簡單的String c=a+b的Java問題引發一點想法 http://mushiqianmeng.blog.51cto.com/3970029/723175/