2017-12-02
javaSE-数据类型
1.基本数据类型分类
1-1基本数据类型
(又叫原生类或内置类型)
整数:byte,short,int,long(默认是int类型)
浮点类型: float,double(默认是double类型)
字符类型:char
布尔类型:boolean
1-2引用数据类型
数组,类,接口 ,枚举类型,注解类型;
基本数据类型之间除了boolean,其他数据类型之间可以任意的相互转换(强制转化或默认转换)
1-3默认值问题
基本类型的值就是一个数字,一个字符,或者一个布尔值。存放在栈空间中,未初始化时为随机值(正常无法使用,编译期异常)。
引用类型是一个对象类型,值是指向内存空间的引用,就是地址。所指向的内存空间有默认值.
1-4基本数据类型优点
在栈内存中,速度很快,每次开辟的空间,都可以实现栈内数据共享
1-5JVM对基本数据类型和引用数据类型的分配
JVM虚拟机对基本数据类型和引用数据类型的分配策略是不同的
基本数据类型:分配数据类型实际大小的内存
引用数据类型:分配一个指向堆内存的引用
1-6被final修饰
(编译期对常量识别)当数据被final修饰时,即转换为常量,此时对该数据类型做运算只会考虑数据的范围,只要不超过范围即可运行
2.基本数据类型包装类
2-1.包装类
Byte,Integer,Short,Long,Float,Double,Boolean,Character
2-2区别
存放位置/内存消耗/值址类型
2-3.场景
集合/持久层接收数据库(如查找数值)/指定字符串类型等
2-4.自动拆装箱
java5.0以后,添加自动拆装箱功能,就可以不必显示的进行类型转换,系统会自动的按照需要进行数据类型的转换。
手动Integer拆装箱方法
1 | Integer valueOf(String s/int i) 两种装箱 |
2-5.包装类型和泛型集合的关系
在java中,所有的泛型集合存放的值或者变量统一转换为Object类型。
因为Object是所有类的祖类,因此这个转化过程都不需要强转
此时无论是写int类型还是Integer类型,存入集合都会转为Object
1 | public static void main(String[] args) { |
注意
集合中存储的元素都是引用类型的引用,int是在栈中的基本数据类型,是无法直接存入集合中的,此时需要装箱
上文提过,java5.0之后,添加了自动拆装箱的功能,所以在使用时一般不会出现问题,但底层确实调用了装箱过程
3.数据类型的设计模式
3-1享元设计模式
如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象java中基本类型的包装类的大部分都实现了常量池技术
这些类是Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。
另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用常量池,也即对象不负责创建和管理大于127的这些类的对象。