1. 程式人生 > >Java String null和空值的處理

Java String null和空值的處理

筆者在開發過程中,常常碰到過下面這些錯誤的用法:

1,錯誤用法一:

if (name == "") {
//do something
}

2,錯誤用法二:
if (name.equals("")) {
//do something
}


3,錯誤用法三:
if (!name.equals("")) {
//do something

}

 
上述錯誤用法1是初學者最容易犯,也最不容易被發現的錯誤,因為它們的語法本身沒問題,Java編譯器編譯時不報錯。但這種條件可能在執行時導致程式出現bug,永遠也不會為true,也就是時說,if塊裡的語句永遠也不會被執行。

上述用法二,用法三 的寫法,是包括很多Java熟手也很容易犯的錯誤,為什麼是錯誤的呢?也許你會感到納悶。
對,它們的寫法本身沒錯,但是,少了一個null判斷的條件,試想,如果name=null的情況下,會發生什麼後果呢?後果是,你的程式將丟擲NullPointerException異常,系統將被掛起,不再提供正常服務。
當然,如果之前已經對name作了null判斷的情況例外。

正確的寫法應該先加上name != null的條件,如例:

if (name != null && !name.equals("")) {
//do something
}


相關推薦

Java String null處理

筆者在開發過程中,常常碰到過下面這些錯誤的用法: 1,錯誤用法一: if (name == "") { //do something } 2,錯誤用法二: if (name.equals("")) { //do something } 3,錯誤用法三: if (

MySQL 中NULL的區別

1:在進行count()統計某列的記錄數的時候,如果採用的NULL值,會別系統自動忽略掉,但是空值是會進行統計到其中的。 2: 判斷NULL 用IS NULL 或者 is not null,SQL 語句函式中可以使用ifnull()函式來進行處理,判斷空字元用=''或者 &

MySQL 中NULL的區別,索引列是否可null

在建立表的時候儘量把欄位的預設值設定成 not null,除非你想儲存null;因為在mysql中為null的的欄位不會走索引,做統計的時候也不會被統計進去,如果想統計進去必須做特定的處理,這樣做比較複雜。可以給欄位的值設定成0、一個特殊的值或者一個空串代替空值。 MySQ

MySQL中NULL的區別

平時我們在使用MySQL的時候,對於MySQL中的NULL值和空值區別不能很好的理解。注意到NULL值是未知的,且佔用空間,不走索引,DBA建議建表的時候最好設定欄位是NOT NULL 來避免這種低效率

hive中的NULL(hive處理)

HIVE表中預設將NULL存為\N,可查看錶的原始檔(hadoop fs -cat或者hadoop fs -text),檔案中儲存大量\N, 這樣造成浪費大量空間。而且用java、python直接進

PHP 類型判斷NULL檢查

ron cal 簡單 www its 類型 cti 哪些 是否 PHP是一種寬松類型的編程語言,在函數中對傳入的參數值的“類型”以及”值是否為空或者NULL“進行檢查是不可缺少的步驟。 類型檢查 從PHP

Mysql varchar 把默認設置為null的區別

指向 變量 因此 區別 char 轉換 強行 含義 提高 ‘\0‘,這個表示空,需要消耗存儲空間的。NULL,則表示連這個\0都沒有。 NULL,你可以近似理解為變量未賦值(定義了變量,但是未使用,變量不指向具體存儲空間,因此,理論上不消耗存儲空間),同時,它理論上不可

我也學php:型別判斷NULL檢查

PHP是一種寬鬆型別的程式語言,在函式中對傳入的引數值的“型別”以及”值是否為空或者NULL“進行檢查是不可缺少的步驟。 型別檢查 從PHP5開始,PHP允許對函式的引數進行型別約束,即可以約束引數的型別為物件,介面,陣列(PHP 5.1開始)或者callable(PHP

FreeMarker 的處理 , 簡單理解 , 不用TMD就會忘記

mark bool 顯示 空字符 marker freemark 返回 後者 als NO.1  而對於FreeMarker來說,null值和不存在的變量是完全一樣的 NO.2  !        指定缺失變量的默認值      返回String NO.3  ??     

mysql 判斷null 字符串

空字符 變量 sel 不能 src when 字符串 返回值 exp 1.在mysql中null 不能使用任何運算符與其他字段或者變量(函數、存儲過程)進行運算。若使用運算數據就可能會有問題。 2.對null 的判斷:   創建一個user表:id 主健 name 可以為空

Java-poi-excel-對單元格的讀取

ava excel col shee != 沒有 因此 單元格 exc // 代碼片段 // 問題背景:導入表格時,當只有一條數據時,沒問題;但導入不是一條數據時,讀完有數據的數據行以後,要進行下一行讀取. // 雖然判斷了行是否為空,但好像沒用,然後在讀取第一個單元格的

Java| String.valueOfInteger.toString的區別

示例程式碼: int i = 4; String i1 = "" + i; //String i1 = (new StringBuilder()).append(i).toString(); String i2 = String.valueOf(i);

Java 解決split 分隔無法得到

應用場景 String s1="A,B," 將s1 以逗號分隔,轉換成集合 正常的轉換結果如下 [A,B] 逗號後的空不再進行分隔,若想逗號後的空即轉換為三個元素的集合 List<String> list = Arrays.asList(s1.split(","

pandas中的處理

1.空值 1.1 有兩種丟失資料: None: Python自帶的資料型別 不能參與到任何計算中 np.nan: float型別 能參與計算,但結果總是nan # None+2 # 報錯

Oracle NVL處理函式

--NVL空值處理函式 --需求:顯示價格表中業主型別ID為1的價格記錄 如果上限值為null,則顯示9999999 select nvl(null,0) from dual; select * from t_pricetable select nvl(maxnum,9999999) from t_p

mysql 處理

如函式   CREATE DEFINER=`root`@`localhost` FUNCTION `aaaaa`( product_code_ varchar(20) ) RETURNS int(11) BEGIN DE

java:Stringint型別相互轉換

public class Demo1_Integer { public static void main(String[] args) { // TODO Auto-generated meth

Java| String, StringBuffertringBuilder之間的區別?

String是 java 程式設計中最廣泛使用的類之一,也是核心 java 面試中最重要的主題之一。 本文主要講解String 類的主要特性,然後我們將比較 String vs StringBuffer 和 StringBuilder。 String字串在 ja

mybaits int 型別的欄位不能 Java 移除 JSONObject 欄位

mybaits int 型別的欄位不能 <if test="sub_name != null and '' != field_name"> 只能 <if test="sub_name != null"> 如果 <if '' != field_name">

SAP_ABAP_在SE11表中檢查初始initial value,ABAP中的初始

1、在開發中遇到這樣的情況:一個表使用了一段時間之後需要增加一些欄位,而表中已經存在資料了。2、SE16(N)檢視資料時,SAP把具有初始值和空值的欄位都顯示為初始值,但是在查詢語句中,它們在資料庫中的行為是不一樣的。3、如果一個表是新建立的,資料庫中的所有欄位都會被設計