Java布尔包装器类如何实例化?

Cra*_*uin 9 java autoboxing instantiation

在java中,我可以编写这样的代码

Boolean b = true ;
Run Code Online (Sandbox Code Playgroud)

它会奏效.我现在有一个保持值为"true"的对象.

这是如何运作的?为什么我不必通过构造函数传递值?像这样:

Boolean b = new Boolean( true ) ;
Run Code Online (Sandbox Code Playgroud)

另外,我可以制作可以以类似方式实例化的自定义类吗?如果是这样的话叫什么?

这样我就可以这样做:

Foobar foobar = "Test" ; 
Run Code Online (Sandbox Code Playgroud)

因此有我自己的包装类.

谢谢

Osc*_*Ryz 13

不,你不能做后者.

前者称为自动装箱,在Java v1.5中引入了自动换行,它们的包装器中包含原语.

使用泛型和/或集合时,可以清楚地看到自动装箱的好处:

来自文章:坚果壳中的J2SE 5.0

"原始类型的自动装箱和自动拆箱"示例中,我们有:

之前(添加了autoboxing)

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42)); 
int total = (list.get(0)).intValue();
Run Code Online (Sandbox Code Playgroud)

 ArrayList<Integer> list = new ArrayList<Integer>();
 list.add(0, 42);
 int total = list.get(0);
Run Code Online (Sandbox Code Playgroud)

如您所见,代码更清晰.

请记住文档中的最后一个注释:

那么什么时候应该使用自动装箱和拆箱?仅在引用类型和基元之间存在"阻抗不匹配"时才使用它们,例如,当您必须将数值放入集合时.将自动装箱和拆箱用于科学计算或其他对性能敏感的数字代码是不合适的.Integer不能替代int; autoboxing和unboxing模糊了原始类型和引用类型之间的区别,但它们并没有消除它.