在前边的文章中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型。在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的对象(比如基本数据类型存在与之对应的包装类,数组有List对象可以代替)
Java中数据类型 主要有“基本数据类型”、“String”、“引用类型” (基本的引用类型不多做介绍,在下一篇博文中着重介绍“枚举”,也算是引用类型的一种)
一:基本数据类型 1.1基本数据类型的定义byte、char、int、 float 、double、long...这些属于java的基本数据类型。具体用法可以参照 (Java基本数据类型总结 ) .在java看来,使用基本类型并不是面向对象的设计,于是提供一些专门的包装类。实际开发中,不需要我们考虑到底是用基本类型还是包装类(Java提供了自动装箱机制)。当然基本类型还是有必要学习一下的。
1.1.1按种类了解基本类型基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变
Java决定了每种简单类型的大小,并不随着机器结构的变化而变化。这正是Java程序具有很强移植能力的原因之一。下表列出了Java中定义的简单类型、占用二进制位数及对应的封装器类。
简单类型 boolean byte char short Int long float double void 二进制位数 1 8 16 16 32 64 32 64 -- 封装器类 Boolean Byte Character Short Integer Long Float Double Void
这张表可以简单的看一下,但不推荐花费太多时间(实际开发不需要,如果是应付考试还是需要记一下的)。因为 Java语言之所以流行就是希望程序员可以消耗更少的心力在语法上,从而省出更多的时间去整理具体的业务逻辑。在基本数据类型这一块,Java提供自动装箱机制,下面简单介绍一下自动装箱。
1.1.2Java中自动装箱自动装箱就可以简单的理解为将基本数据类型封装为对象类型,来符合java的面向对象。比如你可以直接把一个int值复制给一个Integer对象
//声明一个Integer对象 Integer num = 10;
自动装箱的时候,存在一个细节点就是“对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象”,测试如下
//在-128~127 之外的数
Integer num1 = 297; Integer num2 = 297;
System.out.println("num1==num2: "+(num1==num2));
// 在-128~127 之内的数
Integer num3 = 97; Integer num4 = 97;
System.out.println("num3==num4: "+(num3==num4));
//测试结果:num1==num2: false \n num3==num4: true
有时候,只能用包装类,不能用基本数据类型,比如集合内
具体的细节可以参考这几位仁兄的博客 (Java 自动装箱与拆箱(Autoboxing and unboxing),Java 自动装箱与拆箱)
1.2 基本数据类型的保存位置基本类型存储在栈中,处于效率考虑,基本类型保存在栈中。延伸一下,包装类保存在堆中(注意我之前说过的-127到128之间的包装类Integer)
1.3 堆栈的简单介绍(这个和基本数据类型没有太大关系相当于是扩展内容)