Java原语类型:int与Integer

tjb*_*tjb 18 java android types

我很困惑何时在Java中使用原始与非原始(?)类型(即int与Integer).我意识到在某些地方你不能使用原始类型(例如在使用 泛型时).但是在"普通"代码中呢?使用非原始类型会有性能损失吗?使用Android时怎么样?

***我的问题与这个问题非常相似,这个问题是由以下海报之一发现的.相关问题的答案提供了对此问题的更多见解,这些问题未在下面介绍.

***"非原始"类型被官方称为引用类型.

egg*_*ie5 21

简答:An int是一个数字; an Integer是一个可以引用包含数字的对象的指针.使用Integer算术涉及更多的CPU周期和占用更多的内存.An int不是一个对象,不能传递给任何需要对象的方法(就像你对Generics所说的那样).

  • 如果我没有弄错的话,堆栈上的Integer会在堆栈上分配一个int ... (4认同)
  • 我相信引用在堆栈上,但实际的整数值本身在堆上. (2认同)

Hea*_*ink 5

非原始类型是对象。它们必须动态分配、垃圾收集并检查是否为空(尽管其中一些操作可能会被优化编译器删除)。读取它们的实际值需要从指针加载。原始类型是值。它们通常占用更少的空间并且访问速度更快。

一个好的经验法则是,除非需要多态性,否则使用原始类型,在这种情况下使用相应的对象。