Java数据类型之浅析Java基本类型
为了使得我们比较详细的了解,首先了解两个定义:
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构具体指同一类数据元素中,各元素之间的相互关系,包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。
数据类型在数据结构中的定义是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称。
1.计算机存储单位的换算
在计算机中,最小的存储单位是:位(bit),存放一位二进制数,即 0 或 1,英文缩写b(注意是小写)。其次是:字节(byte),8个二进制位为一个字节,英文缩写B(注意是大写),另外还有:KB、MB、GB、TB等等。
类型 | 大小 |
---|---|
1B | 8 bit |
1 KB | 1024B |
1MB | 1024 KB |
1 GB | 1024 MB |
1 TB | 1024 GB |
2.Java中数据类型的分类
在Java中,数据类型总体上分为两大类。一是基本数据类型,共8种,基本数据类型的变量存储的是数据值本身;二是引用数据类型,引用数据类型的变量存储的是保存数据的内存空间地址。其中基本数据类型主要包含4种整数类型、2种浮点数类型、字符型、布尔型。而除了基本类型以外的其他类型都可以是引用类型。
Java之所以设计基本数据类型是因为在进行程序设计时需要频繁使用到它们,而new创建对象(特别是小的、简单的变量)并不是非常有效,因为new将对象置于“堆”里。所以在Java中不用new创建变量,而是创建一个并非句柄的“自动”变量。这个变量容纳了具体的值,并置于堆栈中,能够高效的存取(摘自《Java编程思想》),简言之,就是基本类型的变量存在栈中,而new出来的对象存在堆中。
Java1.1增加了两个类,用于高精度计算:BigInteger(支持任意精度整数)和BigDecimal(支持任意精度的小数)。
3.基本数据类型的大小及范围
类型 | 大小 | 范围 | 默认值 |
---|---|---|---|
boolean | 1位 | false/true | false |
byte | 1个字节(8位) | -128~127 | 0 |
short | 2个字节 | -32768~32767 | 0 |
int | 4个字节 | -2^31 ~ 2^31-1 | 0 |
char | 2个字节 | 可指定、可动态分配 | \u0000 |
long | 8个字节 | -2^63 ~ 2^63-1 | 0 |
float | 4个字节 | -2^31 ~ 2^31-1 | 0.0 |
double | 8个字节 | -2^63 ~ 2^63-1 | 0.0 |
整数字面量默认都为 int 类型,所以在定义的 long 型数据后面加 L或 l。
浮点数字面量默认都为 double 类型,所以在定义的 float 型数据后面加F 或 f;double 类型可不写后缀,但在小数计算中一定要写 D 或 X.X
另外,在Java中,布尔类型(boolean)的值为常量,即true或者false。要区别于C语言,不能使用0或者1之类的数字表示真假。
4.Java数据类型转换
在java中,类型转换一般分为自动转换和强制类型转换, 首先要强调boolean类型与所有其他7种类型都不能进行转换。
- 自动转换:char与byte、short类型因值的范围不同,不能自动转换。 byte、short、int类型的数据参数运算时,都将会转换为int类型,并且结果也是int(自动向上转型);char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换;如果有浮点数参与运算,除非有特殊声明,否则都会转成最大的类型参与运算。
例如:2个操作数(包括byte,short,char,int),都将会转换为int类型,并且结果也是int(自动向上转型)
int num = 10;
double b = 10.01;
double c = num + b;//在运算时,会将num的类型转换成double类型。
System.out.println(c);
- 强制转换:
高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降。
int i=99;
char c=(char)i; //强制类型转换
System.out.println(c);
byte t = 127;//会报错。
byte b = (byte)127;不会报错