今天被Boolean.getBoolean(String name)騙了

今天確實被騙了,而後找到下面的分析文章。java

關於Java的Boolean.getBoolean方法測試


Boolean.getBoolean(String name)這個方法常常誤導使用者,使用者常常會覺得是經過一個String的"true"轉換爲Boolean的true,但結果卻不是這樣的.this


看一下API的解釋:spa

英文的API:----------------------------------------------------------------------------------------------------
public static boolean getBoolean(String name)
Returns true if and only if the system property named by the argument exists and is equal to the string "true". (Beginning with version 1.0.2 of the JavaTM platform,orm

the test of this string is case insensitive.) A system property is accessible through getProperty, a method defined by the System class. 
If there is no property with the specified name, or if the specified name is empty or null, then false is returned.ci

Parameters: 
name - the system property name. 
Returns: 
the boolean value of the system property. 
See Also: 
System.getProperty(java.lang.String), System.getProperty(java.lang.String, java.lang.String)字符串

中文的API:----------------------------------------------------------------------------------------------------
public static boolean getBoolean(String name)當且僅當以參數命名的系統屬性存在,且等於 "true" 字符串時,才返回 true。(從 JavaTM 1.0.2 平臺開始,字符串的測試再也不區分大get

小寫。)經過 getProperty 方法可訪問系統屬性,此方法由 System 類定義。 
若是沒有以指定名稱命名的屬性或者指定名稱爲空或 null,則返回 false。string


參數:
name - 系統屬性名。 
返回:
系統屬性的 boolean 值。
另請參見:
System.getProperty(java.lang.String), System.getProperty(java.lang.String, java.lang.String)it


這裏須要注意的是「系統屬性」,也就是說getBoolean是用於訪問Java系統屬性的方法,與將字符串"true"轉成boolean的true沒有任何關係。
換句話說這個getBoolean不是轉換方法,而是獲取Java系統屬性的方法。

 

如下是Boolean.getBoolean的正確用法:


public class TestGetBoolean
{

public static void main(String[] args){

/*
*當且僅當以參數命名的系統屬性存在,且等於 "true" 字符串時,才返回 true
*/

//大寫的true返回爲false,必須是小寫的true
String s1 = "true";

String s2 = new String("true");

//這裏將s1存放到Java系統屬性中了.
System.setProperty(s1,"true");

System.setProperty(s2,"true");

//這裏從系統屬性中獲取s1,因此獲取到了。
System.out.println(Boolean.getBoolean(s1));//true

System.out.println(Boolean.getBoolean(s2));//true

String s3 = "true";

//很明顯s3並無存放到系統屬性中因此返回false。
System.out.println(Boolean.getBoolean(s3));//false

//這個更是錯的了,呵呵。
System.out.println(Boolean.getBoolean("true"));//false
}

}


如下是將字符串"true"轉成boolean的true的正確用法:


正確用法:boolean repeatIndicator = Boolean.valueOf("true").booleanValue();
   或者也能夠使用Boolean.parseBoolean()方法,但此方法是jdk1.5之後推出的。

總結:

Java在將字符串的值轉換爲相應的類型時,須要多使用parse開頭的方法,或者是valueOf之類的方法。

或直接強轉也能夠。

相關文章
相關標籤/搜索