Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
Java中包含三种引用类型即为数组,类,接口, Java得三种引用类型,储存在引用类型变量中的值是该变量表示的值的地址”。最大的区别:值类型的变量存放在栈里;引用类型的数据存放在堆中。
具体区别:
1、值类型继承自ValueType(注意:而System.ValueType又继承自System.Object);而引用类型继承自System.Object。
3、值类型的内存不由GC(垃圾回收,Gabage Collection)控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,因此具有性能上的优势。例如,通常struct比class更高效;而引用类型的内存回收,由GC来完成。
4、值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承或者多继承接口;而引用类型一般都有继承性。
5、值类型不具有多态性;而引用类型有多态性。
6、值类型有两种状态:装箱和未装箱,运行库提供了所有值类型的已装箱形式;而引用类型通常只有一种形式:装箱。(装箱和取消装箱的概念是 C# 的类型系统的核心。它在“值类型”和“引用类型”之间的架起了一座桥梁,使得任何“值类型”的值都可以转换为 object 类型的值[装箱],反过来转换也可以。其中任何类型的值最终都可以按对象处理。)
Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。