Q
对象或原始类型
5
A
回答
8
Boolean
,Integer
,Long
...是对象。您可以在不能使用原始类型的地方使用它们,例如
- 将它们存储在像
Map
- 集合使用它们作为模板参数
- 以更一般的方式使用它们分配他们一个
null
值 - (例如
Long
如Number
)
示例:
new ArrayList<Integer>();
Long id = null;
Number num = new Long(3);
4
整数,布尔等的基本原理是允许基本类型在需要引用类型的上下文中使用。经典用例是集合API,它提供集合,列表,映射,队列等,其中元素类型必须是某种引用类型。
因此我可以这样写:
List<Integer> list = new ArrayList<Integer>();
但下面是一个编译错误:
List<int> list = new ArrayList<int>();
注意,该用例的基本包装类型早都泛型类型和“新“收集API,并回溯到仅有的收集类型是原始(通用)形式的Vector
和Hashtable
及其同类的日子。
4
有时候你真的需要一个可以为空的值,例如如果你的应用存储用户数据,社会安全#可能是未知的。在这种情况下,存储空值而不是-1是更清洁的。
此外还有一些你不能用原始类型做的事情,比如将它们存储在映射中或使用多态性(Double和Integer都是Number的实例)。
1
基元总是更快。
但是有次,当对象真的有用时:
1.向上转换。您的函数可以将Number(对于所有数值对象为整数,浮点数等)作为参数。
2.可能的空值。例如,它在数据库中存储时使用。对象可以为null,基元必须有价值。所以如果db中的字段为空,最好使用原始值的对象版本。
3.如果函数带有对象,并且您总是给它一个原型,那么在自动装箱(将原始对象转换为对象)上会有开销。从函数返回一样。
4.对象有一些特定的方法,比如getHashcode(),toString()等等,在某些情况下它确实有用。
相关问题
- 1. 投掷对象返回原始类型
- 2. typedef - 原始类型到原始类型
- 3. 检查反射如果类型是原始的或类型是对象
- 4. 对原始类型双“
- 5. 参数对象的类型[类型]不是原始的
- 6. 总是使用原始对象包装器替代原始类型的JPA @Id?
- 7. 初始化对象类型
- 8. 铸造从int(原始类型)阵列到整型(对象类型)阵列
- 9. 与原始类型
- 10. Bash原始类型
- 11. Js原型简单类型和对象
- 12. 原型对象
- 13. 对原型类使用对象文字
- 14. 整型为原始类型
- 15. java中的原始类对象
- 16. 从对象转换为原始类
- 17. 对原始类型使用属性
- 18. Java:原始类型对象内的泛型类型或为什么我的参数化不起作用
- 19. 将原始类型应用到原始类型
- 20. 原型中原始类型的行为
- 21. 为什么原始类型的数组不被视为对象
- 22. 使用Java创建原始类型/对象反射
- 23. 返回对象比原始类型有什么好处?
- 24. 如何从JSON恢复原始对象/类型?
- 25. 原始数据类型Vs的对象在目标C
- 26. XmlSerializer:参数对象的类型不是原始的
- 27. Java反射〜设置原始类型的内部对象值
- 28. 境界JS创建原始数据类型列表对象
- 29. 如何扫描非原始类型的对象?
- 30. 强制转换原始类型为可空对象
要添加到答案中,一个实际的例子将存储变量在会话上下文中的Web应用程序。 – saugata 2010-05-21 06:23:09
不仅Map,所有的容器类都要求它们的元素是Object,因此原始类型不能满足这个约束。我认为容器是面向过程语言的面向对象语言的一个方面,它为您带来很多便利。 :-) – 2010-05-21 06:26:30