我知道包装类是什么,它们将原始类型(例如int,double等)包装到它们各自类的对象中。
但我想知道一个可以解释我的Java代码示例。
使用包装器类和out包装类它将做什么。
答案 0 :(得分:1)
当Java语言被“发明”时,人们认为原始类型为int,long,...会避免性能问题。 15年多以前,没有高效的JIT编译器;所以如果你必须创建10000个int的数组......或者10 000个Integer对象,它会产生很大的不同。
另一方面,Java希望成为面向对象的语言。因此,这些原始类型伴随着类。从某种意义上说,你是正确的:如果没有原始的tpyes,只有Integer,Long,......等等,Java类型系统将更加一致,更简单......但是在1997年这个简单的类型系统会在表现方面一直“昂贵”。不幸的是,人们没有考虑在字节码中允许原始类型......但是没有在Java语言本身中使用它们(以及编译器在内部将Integer转换为int)。
现在的主要用途是Java编译器进行自动装箱(基本和“基于对象”类型之间的自动转换);所以你可以写下这样的东西:
Map<Integer, String> someMap = ...
someMap.put(5, "string")
答案 1 :(得分:1)
包装类用于将任何数据类型转换为对象。原始数据类型不是对象;他们不属于任何阶级;它们是用语言本身定义的。有时,需要将数据类型转换为Java语言中的对象
什么是包装类?
包装器类包装或包含数据类型,并为其提供对象的外观。您还可以从对象中获取原始数据类型。
请注意以下示例。
int x = 100;
Integer iObj = new Integer(x);
在Integer类的帮助下,int数据类型(x)被转换为对象(iObj)。这可以在需要对象时使用。
以下代码可用于解包对象iObj并获取原始数据类型。
int y = iObj.intValue();
System.out.println(y); // prints 100
intValue()是Integer类的一种方法,它返回一个int数据类型。
为什么包装类?
将原始数据类型转换为对象,反之亦然。
答案 2 :(得分:0)
简单的一行答案可能是ArrayList<Integer>
但你不能ArrayList<int>
。它们用于集合,多态等。所以我认为Java设计人员希望简化它们,这就是他们使用包装类概念的原因。
Java是一种面向对象的语言,就像java中所说的那样 一个东西。但原始人呢?他们有点被遗忘了 物体的世界,也就是说,它们不能参与物体 活动,例如从作为对象的方法返回,以及 被添加到对象集合等。作为解决方案 问题,Java允许您在基类中包含基元 对象使用所谓的包装类。
答案 3 :(得分:0)
Java中存在包装类型主要有两个原因:
float
数字,因为它们不是对象。此外,它们不继承自java.lang.Object 因此,您可以拥有ArrayList<Integer>
,因为Integer从Object扩展(与JVM中的每个其他对象一样)。但是你不能拥有一个ArrayList,因为int
不是一个对象类型:它只是一个简单的int变量,没有方法,实例变量等。
从Java 1.5开始,你就会在其对应的包装器类型中自动装箱和取消装箱原始类型,这会让一切变得更加混乱。考虑一下这个清单:
List list = new ArrayList<Integer>()
list.add(new Integer(10))
list.add(20)
在这里您可以看到此列表仅使用Integer对象。在最后一行中,编译器将简单值20
放在新的Integer对象中以节省一些输入。这是一个小的语法糖,但这个想法仍然存在:list只能使用Integer
个对象。