A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Boolean b = new Boolean(null);
像上面的代码是正确的吗?


[size=+2]构造方法摘要
Boolean(boolean value)
          分配一个表示 value 参数的 Boolean 对象。
Boolean(String s)
          如果 String 参数不为 null 且在忽略大小写时等于 "true",则分配一个表示 true 值的 Boolean 对象。
boolean的值不是只有true和false吗!而且Boolean类的构造函数可以接受boolean或者String,并没有说明可以接受null啊。
反正在某个测试题中是正确的,但是我不知道原因,谁可以帮忙解答。

4 个回复

倒序浏览
Boolean b = new Boolean(null);
System.out.println(b);
// 运行结果为:false
回复 使用道具 举报
本帖最后由 参禅悟道 于 2016-2-17 17:23 编辑

你看解释的时候,是不是没看全呀。
API上原话:如果 String 参数不为 null 且在忽略大小写时等于 "true",则分配一个表示 true 值的 Boolean 对象。否则分配一个表示 false 值的 Boolean 对象。

后面还有否则呢,否则的意思就是如果参数是null就分配一个表示false的Boolean对象。
另外:Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量。而Boolean构造函数的参数是String类型,是引用类型,所以可以把null赋过来。

QQ截图20160217171737.png (38.18 KB, 下载次数: 298)

QQ截图20160217171737.png
回复 使用道具 举报
玉质彼端 发表于 2016-2-17 17:15
Boolean b = new Boolean(null);
System.out.println(b);
// 运行结果为:false

这个......
我自己也试过,可以有什么卵用?我要的是解释
回复 使用道具 举报
参禅悟道 发表于 2016-2-17 17:20
你看解释的时候,是不是没看全呀。
API上原话:如果 String 参数不为 null 且在忽略大小写时等于 "true", ...

卧槽,我明白了。还以为null是当作boolean类型参数呢。原来是作为String类型的参数,传递到第二个构造函数中,也就是说,只有String的值是true的时候Boolean才是true,否则其他任何情况无论TRUE或false或null或abc都是false。
原来如此
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马