一、基本数据类型
创建变量即申请内存,内存管理系统根据类型分配用于存储数据的空间。
Java两大数据类型:
- 内置数据类型
- 引用数据类型
(一)、内置数据类型
Java提供8种数据类型,分别有以下几种:
- byte:类似C语言的signed char,用于表示8位有符号的整数,数值范围为:-27~27-1,如100。
- short:16位有符号短整型,数值范围为:-215~215-1,如100。
- int:32位有符号整型,数值范围为:-231~231-1,如100。
- long:64位有符号长整型,数值范围为:-263~263-1,如100L、100l
- float:32位单精度浮点型,其中符号位占1位,指数长度为8位,尾数长度为23位,符合IEEE 754标准,即float可以和4字节字节型数据相互转换,如100.0f。以C语言为例,定义一个联合体(联合体内数据共享同一个首地址):
union Float_Char
{
float f;
char ch[4];
};
Float_Char.f=10.1;//ch[]内部数据就可以表示该float数据,还要注意大小端模式!
- double:64位双精度浮点型,其中符号位占1位,指数长度为11位(整数部分),尾数长度为52位(小数部分),也符合IEEE754标准,如100.0d。
- boolean:1位数据,仅有true和false两种取值。
- char:16位Unicode(万国码)字符,最小值为\u0000(即0),最大值为\uffff(即65535),如’X’。
1、Example
数据类型存在于java.lang,下面分别输出各类型所占用内存位数,所表示数值的最小值和最大值。
package day2;
public class DataType {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Byte.SIZE); //byte类型占用内存大小
System.out.println(Byte.MIN_VALUE); //byte类型表示数据最小值
System.out.println(Byte.MAX_VALUE); //byte类型表示数据最大值
System.out.println();
System.out.println(Short.SIZE);
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
System.out.println();
System.out.println(Integer.SIZE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println();
System.out.println(Long.SIZE);
System.out.println(Long.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
System.out.println();
System.out.println(Float.SIZE);
System.out.println(Float.MIN_VALUE);
System.out.println(Float.MAX_VALUE);
System.out.println();
System.out.println(Double.SIZE);
System.out.println(Double.MIN_VALUE);
System.out.println(Double.MAX_VALUE);
System.out.println();
System.out.println(Character.SIZE);
System.out.println((int)Character.MIN_VALUE);//以数值形式表示字符
System.out.println((int)Character.MAX_VALUE);
System.out.println();
}
}
调试器输出信息:
8
-128
127
16
-32768
32767
32
-2147483648
2147483647
64
-9223372036854775808
9223372036854775807
32
1.4E-45
3.4028235E38
64
4.9E-324
1.7976931348623157E308
16
0
65535
(二)、引用类型
引用类型类似于C/C++中的指针,对象和数组都是引用类型,默认值为void,可指向任意与之兼容的类型数据。以对象为例:
Puppy puppy = new Puppy("seanOY");
(三)、常量
Java中常量使用final来修饰,在程序运行时不可被修改。为了便于区分,名字通常为大写,如PI的表示:
final float PI = 3.14;
常量(字面量)可以赋值给任意内置变量,如byte、char、int等。其中Unicode字符表达形式为’\uxxxx’,如’\u0032’表示字符’2’。
(四)、自动类型转换
当多种类型进行运算的时候,结果值的类型总为运算中占用字节数最多的那种类型(混合运算中不能有boolean)。如下混合运算按照byte(8位)->short、char(16位)->int(32位)->long(64位)->float(32位单精度浮点型)->double(64位双精度浮点)这种低位到高位类型转换的顺序进行。
byte b1 = 100;
short s1 = 100;
char c1 = 100;
int i1 = 100;
long l1 = 100L;
float f1 = 100.0f;
double d1 = 100.0d;
System.out.println(b1+s1+c1+i1+l1+f1+d1);
(五)、强制类型转换
在强制类型转换的时候需要注意数据的溢出和精度损失问题,同时浮点型数据强制转换为整型是直接丢弃小数位,而非四舍五入。
(六)、隐含强制类型转换
整数默认类型为int,浮点数则不存在这种情况,所以需要在数据末尾加上L或d来表示。
参考链接:
菜鸟教程-java基本数据类型