java数据类型概述
跟php、javaScript等弱类型语言相比,java是一种强类型(strongly typed)编程语言,
体现在下面2点:
- 变量必须先申明、后使用
- 指定类型的变量只能接受与之匹配的值
java数据类型
下面主要对基本数据类型做一个解释:
整数类型
1 字节(byte) = 8 位(bit),在计算机中,正数用原码表示,负数用补码表示,因此4种整数类型表数范如下(详细见《【转】负数在计算机中的表示 》):
note:
整数默认是int类型,如果要转为Long,需要加上L或者l。
浮点类型
同样的,浮点数表数范围如下:
note:
1.浮点数默认是double,如果要定义为float,需要加上F或者f。
2.浮点数有十进制和科学计数法2种表现形式。
字符类型
char型(字符型)数据在内存中占用2个字节。char型数据用来表示通常意义上的字符,每个字符占2个字节,Java字符采用16位的Unicode编码,它的前128字节编码与ASCII兼容字符的存储范围在\u0000~\uFFFF(65,535,即2的16次方-1),在定义字符型的数据时候要注意加' ',比如 '1'表示字符'1'而不是数值1。
char c = '1';
System.out.println(c);
char d = '\u0031';
System.out.println(d); //c、d输出的值是一样的
note:
1.char是用单引号,字符串用双引号。
2.这块要复习下askii码、unicode等编码相关知识。
布尔型
数据值只有true或false,适用于逻辑计算。
note:
boolen本来只需要1个bit位就可以表示,但是目前占用的是1个字节(8个bit),这是因为大部分计算机分配内存的最小单元是1字节。
数据类型转换
java提供的7种数值类型直接可以相互转换。
自动类型转换
小转大,相当于把小瓶里的水倒入大瓶,不会有任何问题。
强制类型转换
大转小,转换的格式是:(targetType)value。
如果大瓶子里的水很多,将会引起溢出,从而造成数据丢失,因此这种转换也被称为“缩小转换(narrow conversion)”。
引用数据类型
基本数据类型在栈中直接分配内容;引用数据类型的数据在栈中,对象的引用在堆中。
JVM的内存空间:
a. Heap 堆空间:分配对象
b. Stack 栈空间:临时变量
c.Code 代码区 :类的定义,静态资源
Student stu = new Student(); //new 在内存的堆空间创建对象
stu.study(); //把对象的地址赋给stu引用变量
上例实现步骤:
a.JVM加载Student.class 到Code区
b.new Student()在堆空间分配空间并创建一个Student实例
c.将此实例的地址赋值给引用stu, 栈空间。
自动装箱拆箱
在java数据类型的基础上,要理解装箱拆箱机制。
装箱:把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。int包装成Integer、float包装成Float
拆箱:和装箱相反,将引用类型的对象简化成值类型的数据
Integer a = 100; //这是自动装箱 (编译器调用的是static Integer valueOf(int i))
int b = new Integer(100); //这是自动拆箱