javaSE-数据类型

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
2
3
4
Integer valueOf(String s/int i)  两种装箱 
int parseInt(String s) 拆箱
----
int intValue() 拆箱(直接. 不需要参数的拆箱方法)

2-5.包装类型和泛型集合的关系

在java中,所有的泛型集合存放的值或者变量统一转换为Object类型。

因为Object是所有类的祖类,因此这个转化过程都不需要强转

此时无论是写int类型还是Integer类型,存入集合都会转为Object

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
int a=1123;
Integer b=22222;

List list=new ArrayList<>();
list.add(a);
list.add(b);
System.out.println(Integer.parseInt(list.get(0).toString())==1123); //true
}

注意

集合中存储的元素都是引用类型的引用,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的这些类的对象。

3-2字符串常量池