Int
int 是我们常说的整型数字, 是 Java 的 8 个原始数据类型 (Primitive Type:boolean,byte,short,char,int,float,double,long) 之一. Java 语言虽然号称一切都是对象, 但原始数据是例外.
Integer
Integer 是 int 对应的包装类, 它有一个 int 类型的字段存储数据, 并且提供了基本操作, 比如数学运算, int 和字符串之间转换等. 在 Java5 中引入了自动装箱和自动拆箱功能, Java 可以根据上下文, 自动进行转换, 极大的简化了相关编程.
关于 Integer 的值缓存
这涉及 Java5 中的另一个改进. 构建 Integer 对象的传统方式是直接调用构造器, 直接 new 一个对象. 但是根据实践我们发现大部分数据操作都是集中在有限的, 较小的数值范围, 因而在 Java5 中新增了静态工厂方法 value of, 在调用它的时候会利用一个缓存机制, 带来了明显的性能改进. 按照 Javadoc, 这个缓存默认值是 - 128 到 127.
补充 1
原始数据类型和 Java 泛型并不能配合使用, 也就是指 Primitive Types 和 Generic 不能混用, 于是 Java 就设计了 auto-boxing/unboxing 机制, 实际上就是 primitive value 与 object 之间的隐形转换机制, 否则要是没哟这个机制, 开发者就必须每次手动显式转换, 这多麻烦呀. 但是 primitive value 与 object 各自有各自的优势, primitive value 在内存中存的是值,, 所以找到 primitive value 的内存位置, 就可以获得值; 不像 object 存的是 reference, 找到 object 的内存位置, 还要根据 reference 找下一个内存空间, 要产生更多的 IO, 所以计算性能比 primitive value 差, 但是 object 具备 generic 的能力,, 更抽象, 解决业务问题编程效率高. 于是 Jvav 设计者的初衷是这样的: 如果开发者要计算, 就使用 primitive value; 如果开发者要处理业务问题, 应该使用 object, 采用 Generic 机制. 反正 Java 有 auto-boxing/unboxing 机制, 对开发者来讲也不需要注意什么. 为了弥补 object 计算能力的不足, 还设计了 static valueof()方法提供缓存机制, 算是一个弥补.
来源: http://www.bubuko.com/infodetail-2646257.html