我很惊讶地知道getBoolean()
和valueOf()
方法会为同一输入字符串返回不同的结果。
我试图将"true"
传递给这两种方法。但是getBoolean()
给了我错误的输出,而valueOf()
给了我正确的输出,这是真的。为什么呢?
答案 0 :(得分:83)
The API-documentation is your friend.
Boolean.getBoolean
可能不符合您的想法:
当且仅当参数命名的system property存在且等于字符串“true”时才返回true。
Boolean.valueOf
可能就是你要找的东西:
如果字符串参数不为null且等于忽略大小写,则返回的布尔值表示值true为字符串“true”。
答案 1 :(得分:5)
getBoolean的javadoc清楚地表明它搜索系统属性。传递给它的值是系统属性的名称,而不是“true”或“false”字符串。
例如,`var b = Boolean.getBoolean(“some.property”);
答案 2 :(得分:1)
Boolean.getBoolean
必须是Java中最差的方法。最大的WTF之一。
为什么不将它放在System
或Properties
或其他任何东西中?
所以要回答您的问题-是的,这是一件非常令人困惑的事情,您可以单击IDE中的方法以查看代码或阅读javadoc。
这是源代码:
public static boolean getBoolean(String name) {
boolean result = false;
try {
result = toBoolean(System.getProperty(name));
} catch (IllegalArgumentException e) {
} catch (NullPointerException e) {
}
return result;
}
答案 3 :(得分:0)
我最近在使用Boolean.getBoolean()时也发现了这个问题。另外,如果你想进行空检查,你可以使用Boolean.parseBoolean,如果为空则返回false
答案 4 :(得分:0)
class Boo1
{
public static void main(String[] args)
{
System.setProperty("true","true");
System.setProperty("false","true");
boolean d=Boolean.getBoolean("true");
System.out.println(d);
}
}