浅谈Java中的数据类型

主要内容来自MIT6.031 Software Construction课程及HIT 软件构造课程。

Java的数据类型有两种,分为基本数据类型(primitive types)及对象数据类型(object types)。例如int ,float,boolean等类型就是基本数据类型,而String ,Integer ,BigInteger等类型就是对象数据类型。

下面介绍一下这两点的异同:

基本数据类型都是不可变的(Immutable),而对象数据类型一些是可变的(mutable),一些则不是。基本数据类型存储在栈(Stack)中,而对象数据类型存储在堆(heap)中,由Java的垃圾收集机制管理(garbage collector)。基本数据类型通常不能实现一些复杂的表述,而对象数据类型则可以以泛型的形式表示一些复杂概念。基本数据类型一般来时花费很小,而对象数据类型花费较大。

对象数据类型里还有一种由基本数据类型的封装的包装数据类(Boxed primitive),例如 Boolean , Integer,Short,Long,Float。主要是在Collection中使用。一般不要主动去使用包装类,因为这样做的代价很高。需要编译器做出自动转换。

例如:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);


/////////
list.add(Integer.valueOf(1));
list.add(Integer.valueOf(2));

我们通常会选择第一种写法,但这样其实是一种代价更高的写法。因为1和2根本不是对象,编译器进行了自动转换,降低了效率。下面的写法才是效率更高的一种写法。

猜你喜欢

转载自www.cnblogs.com/siren27/p/9181117.html