因此,根据维基百科和其他人的观点,boolean
值应该只有2个状态:0
或1
; true
或false
; yes
或no
;等等...
好的,如果我错了,请纠正我,但是,Java Boolean
包装器让开发人员有3个状态:true
,false
和null
。
这不是错吗?
我知道它可以用“布尔是一个对象”等等来解释,但是,如果javac自动“包裹”null
到false
,恕我直言,那将是非常好的。 / p>
我的观点是:这种行为让开发人员做了很多废话,因为他们使用Boolean
而不是正确的对象类型。
无论如何,你怎么看待它?我是否遵循了错误的思路......或者它是否真的“错误”?
修改
我知道什么是null
,boolean
和Boolean
之间的差异等等(我有3年+ exp与java)。
我的观点是关于概念本身,例如在Ruby中,例如,如果我执行类似if something
的操作,如果此something
实例为nil
,则它将为{{1 }}
我并不是说Java是废话或类似的东西,我每天都在使用它。
答案 0 :(得分:11)
null
表示缺少值,而true
和false
表示定值。知道某些事情,无论是肯定的还是消极的,而不是完全不了解它之间的区别。这是思考它的一种方式。
从技术上讲,Boolean
可能是null
的原因是因为它是一个对象引用,而不是boolean
值本身,autoboxing可能会对您造成混淆。过去,您必须手动创建Boolean
个对象以包含boolean
值,并从boolean
个对象手动提取Boolean
值。从Java 5开始,编译器将为您解决此问题。
boolean
对象包含的Boolean
的值可以是true
或false
,但是对象变量可能根本不指向对象,在这种情况下,引用的值为null
。
为什么您可能会问boolean
和Boolean
之间的区别?好吧,在Java中,与许多较新的语言不同,原始类型是不是类,而原语是不是对象。当您想要对它们进行处理时,例如当您希望通过引用传递或调用方法或将它们放入集合中时,您必须将它们打包在各自的primitive wrapper classes中。
答案 1 :(得分:3)
如果Boolean
的三重性质不适合您,请勿使用。使用boolean
。当您使用面向Boolean
的界面时,有时需要Object
。发生这种情况时,请使用Boolean
。
boolean
是一种原始类型,表示您描述的概念,一种具有两个可能值的类型:true和false。
Boolean
是不同的类型。它是Object
,其值为boolean
。如果该对象不存在,则引用为空。它不是布尔对象null,它是对布尔对象的引用,它是null。
虽然他们的名字很相似,但请不要混淆boolean
和Boolean
。它们是完全不同的类型。
答案 2 :(得分:2)
由于您的boolean
可以是两种状态,因此使用Boolean
是没有意义的,除非
一般情况下,如果可以,请始终使用原语,除非a)您需要null
值b)您必须使用API。
答案 3 :(得分:1)
你暗示的是包装器应该模仿原始'real'布尔值的严格行为。那就是问题所在。布尔在概念上与布尔值(注意大写)不相同。
原始布尔值将维基百科中描述的内容提供为布尔值。
布尔值(java.lang.Boolean)不会被称为show的包装器。它在概念上是一个包含布尔值的对象。因此,对布尔值的引用是 references ,与布尔值没有任何共同之处。因此,引用的规则适用,而不是原语。
如果你采用这种观点,那就非常简单和符合逻辑。
答案 4 :(得分:0)
您对原始boolean
和原始包装Boolean
感到困惑。确实boolean
只能是true
或false
。
Boolean
个实例也可以容纳true
或false
。但是,如果实例不存在,则引用为null
,因为任何未初始化的引用。
答案 5 :(得分:0)
null
表示“我这里没有对象”。 Boolean
true
对象是原始boolean true
的包装器,但它仍然是一个对象。请注意,以下代码会引发NullPointerException
public static void main(String[] args) {
Boolean myBool = null;
boolean primBool = myBool;
System.out.println(primBool);
}
答案 6 :(得分:0)
Null使其可为空,当您创建数据库时,例如它有一个包含以下列的表:
Col-1:小时(nvarchar)
Col-2:Minute(nvarchar)
Col-3:IsDay(布尔)
因此,如果小时为18分钟且分钟为00,那么IsDay的价值是多少? (这也不是真或假)此时它是空的......