Java是面向对象的编程语言,但它也包含了8种基本数据类型,这8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备对象的特性,没有属性和方法可以被
调用。
为了解决8种基本数据类型的变量不能当成Object类型变量使用的问题,Java提供了包装类的概念,为8种基本数据类型分别定义了相应的引用类型,并称之为基本数据类型的包装
类。这篇博客我将详细的整理一下Java中的包装类。
Java为什么需要保留基本数据类型
既然Java是面向对象的编程语言,既然基本类型不具备面向对象的特性,既然Java已经针对8各基本数据类型提供了包装类,那为什么Java还要保留8个基本类型呢?
原因很简单的:性能。网上有一篇很好的文章,针对Java的基本类型和包装类型各方面做了详细的对比和整理,网址是:http://www.importnew.com/11915.html,点击打开链接,
感谢作者的无私分享。我在这里个人整理一下为什么Java保留基本数据类型。
基本数据类型对以数值计算为主的应用程序来说是必不可少的,自从1995年Java发布以来,基本数据类型就是Java语言的一部分。而使用基本数据类型的原因却只有一个,那就是
性能,并且只适用于那些使用后能提升性能的应用。基本数据类型对大多数业务相关或网络应用程序没有太大的用处,这些应用一般是采用客户端/服务器模式,后端有数据库。然
而,使用基本数据类型对那种以数值计算为主的应用提升性能有很大好处。
软件性能经常用时间和空间来衡量。时间可以是实际的运行时间,比如3.7分钟,或者是基于输入规模的时间复杂度,比如O(n2)。对于空间的衡量也是如此。经常用内存消耗来衡
量,有时候也会扩大到磁盘的使用。改善性能经常要做时间和空间的折衷,缩短时间经常会对空间造成损害,反之亦然。时间复杂度取决于算法,把包装类型切换成基本数据类型
对结果不会有任何改变,但是使用基本数据类型取代对象类型能改善时间和空间的性能。
这里我们来看一段基本类型和包装类型性能对比的代码:
/**
* 基本类型和包装类型的性能对比
*
* @author LinkinPark
*/
public class LinkinPark
{
public static void primitivesMemoryAndTimeTest(int n)
{
System.gc();
long memStart = Runtime.getRuntime().freeMemory();
long timeStart = System.currentTimeMillis();
double[][] a = new double[n][n];
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
a[i][j] = Math.random();
}
}
long memEnd = Runtime.getRuntime().freeMemory();
long timeEnd = System.currentTimeMillis();
System.out.println("基本类型程序运行开始时内存空闲量:" + memStart);
System.out.println("基本类型程序运行结束时内存空闲量:" + memEnd);
System.out.println("基本类型程序运行一共消耗的内存空闲量:" + (memStart - memEnd));
System.out.println("基本类型程序运行开始时间:" + timeStart);
System.out.println("基本类型程序运行结束时间:" + time