有人可以向我解释使用Integer,Boolean等代替JAVA中的原始类型吗?
我似乎无法掌握他们提供的优势。它们似乎会产生处理空值的不必要的问题。
谢谢!
答案 0 :(得分:8)
Boolean
,Integer
,Long
,...是对象。您可以在不能使用基本类型的地方使用它们,例如
Map
null
值Long
为Number
)<强>示例:强>
new ArrayList<Integer>();
Long id = null;
Number num = new Long( 3 );
答案 1 :(得分:4)
Integer,Boolean等的基本原理是允许在需要引用类型的上下文中使用基元类型。经典用例是集合API,它提供集合,列表,映射,队列等,其中元素类型必须是某种引用类型。
因此我可以写:
List<Integer> list = new ArrayList<Integer>();
但以下是编译错误:
List<int> list = new ArrayList<int>();
请注意,原始包装类型的这种用例早于泛型类型和“新”集合API,并且可以追溯到唯一的集合类型是{{1的原始(通用)形式的日子。 }和Vector
,以及他们的同类。
答案 2 :(得分:4)
有时你真的需要一个可以为空的值,例如,如果你的应用程序存储用户数据,社会安全#可能是未知的。在这种情况下,存储null而不是-1更清晰。
还有一些你不能用原始类型做的事情,比如将它们存储在地图中或使用多态(Double和Integer都是Number的实例)。
答案 3 :(得分:1)
原语总是更快
但是有时候,物体真的很有用:
向上倾斜您的函数可以为参数采用Number(所有数字对象的父对象:Integer,Float等)
2.可能的空值。例如,它在存储在数据库中时使用。对象可以为null,原语必须具有值。因此,如果db中的字段可以为空,则最好使用原始值的对象版本
3.如果函数接受对象并且你总是给它一个原语,那么自动装箱就会有费用(将原语变成对象)。从功能返回也是如此
4.对象具有某些方法,例如getHashcode(),toString()等,在某些情况下这些方法非常有用。