Java 对象或基元类型

Java 对象或基元类型,java,autoboxing,Java,Autoboxing,有人能给我解释一下整数、布尔值等在JAVA中代替它们的基本类型的用法吗 我似乎无法理解他们提供的优势。它们似乎在处理空值时产生了不必要的问题 谢谢 布尔值,整数,长。。。都是物体。您可以在不能使用基元类型的地方使用它们,例如 将它们存储在一个集合中,如地图 使用它们作为模板参数 为它们分配一个null值 以更一般的方式使用它们(例如,Long作为Number) 示例: new ArrayList<Integer>(); Long id = null; Number num = n

有人能给我解释一下整数、布尔值等在JAVA中代替它们的基本类型的用法吗

我似乎无法理解他们提供的优势。它们似乎在处理空值时产生了不必要的问题


谢谢

布尔值
整数
。。。都是物体。您可以在不能使用基元类型的地方使用它们,例如

  • 将它们存储在一个集合中,如
    地图
  • 使用它们作为模板参数
  • 为它们分配一个
    null
  • 以更一般的方式使用它们(例如,
    Long
    作为
    Number
示例:

new ArrayList<Integer>();
Long id = null;
Number num = new Long( 3 );
newarraylist();
长id=null;
Number num=新长(3);

整数、布尔等的基本原理是允许在需要引用类型的上下文中使用基元类型。典型的用例是集合API,它提供集合、列表、映射、队列等,其中元素类型必须是某种引用类型

因此我可以写:

List<Integer> list = new ArrayList<Integer>();
List List=new ArrayList();
但以下是一个编译错误:

List<int> list = new ArrayList<int>();
List List=new ArrayList();

请注意,原始包装器类型的这个用例早于泛型类型和“新”集合API,并且可以追溯到只有
Vector
Hashtable
的原始(预泛型)形式及其同类的集合类型的时代。

有时您真的需要一个值才能为null,例如,如果你的应用程序存储了用户数据,那么社会保险可能是未知的。在这种情况下,存储null而不是-1更干净


还有一些事情您不能使用基元类型,例如将它们存储在映射中或使用多态性(Double和Integer都是Number的实例)。

基元总是更快。
然而,有时对象确实很有用:
1.向上投射。您的函数可以将Number(是所有数值对象的父对象:Integer、Float等)作为参数。
2.可能为空值。例如,它是在数据库中存储时使用的。对象可以为null,基元必须具有值。所以,如果db中的字段可为空,则最好使用原语值的对象版本。
3.若函数接受对象,并且您总是给它一个原语,那个么自动装箱(将原语转换为对象)会有开销。从函数返回时也是如此。

4.对象具有某些方法,例如getHashcode()、toString()等,这些方法在某些情况下非常有用。

为了补充答案,一个实际的例子是在web-app的会话上下文中存储变量。不仅映射,所有容器类都要求其元素为对象,因此基元类型不能满足此约束。我认为,容器是面向对象语言压倒过程语言的一个方面,它给您带来了很多便利。:-)