一、数据类型的意义
数据类型是为了对变量的种类进行划分
也就是说,程序运行的时候那些可变的量需要开辟出一块内存空间来保存,那么我们应该在内存中给它分配多大的空间来存储呢?每一个数据都需要多大的内存?可以都分配4个字节嘛?
所以就有了数据类型的存在,为了更合理的节约的使用内存空间,每一个量我们都根据它的类型来分配,更好的利用了内存空间。
二、Java中的数据类型
Java是一种强类型语言。
why?
由于为每一个变量声明一种类型,且所有的数值类型所占字节数量与平台无关。
Java中数据类型分为了8种基本数据类型和引用类型。
三、基本数据类型
1. 整型
整型用于表示整数。(包括正整数和负整数)
| 类型 | 存储大小 | 取值范围 | 包装类 |
|---|---|---|---|
| int | 4字节 | -2147483648 ~ 2147483647 (21亿左右) | java.lang.Integer |
| short | 2字节 | -32768 ~ 32767 | java.lang.Short |
| long | 8字节 | -9223372036854775808 ~ 9223372036854775807 | java.lang.Long |
| byte | 1字节 | -128 ~ 127 | java.lang.Byte |
** 在java中,整型的范围与运行java代码的机器无关(体现了一次编译到处运行)
注:
① 长整型数值有一个后缀L或l。
② 进制表示
| 进制 | 前缀 |
|---|---|
| 二进制 | 0b |
| 八进制 | 0 |
| 十六进制 | 0x |
③ java中没有任何无符号形式的类型
若必须要用byte表示表示0 ~ 255,可以调用Byte.toUnsignedInt(b)来得到int值进行处理,再转回byte。
2. 浮点型
浮点型用于表示有小数部分的数值。
| 类型 | 存储大小 | 取值范围 | 包装类 |
|---|---|---|---|
| float | 4字节 | 有效位数为6 ~ 7位 | java.lang.Float |
| double | 8字节 | 有效位数为15位 | java.lang.Double |
注:
① float类型的数值有一个后缀f或者F,没有后缀默认是double类型
② 浮点数不适合运算无法接受舍入误差的金融计算。浮点数采用二进制,无法精确表示所有的分数,所以,计算时会出现误差。如果要求必须没有任何舍入误差,可以使用BigDecimal。
3. 字符型
① char类型用于表示单个字符,char类型的字面常量值要用单引号括起来。
② 它在内存中占2字节,将字符转换为二进制存储,就必须依靠Unicode编码机制。
③ 它的包装类是java.lang.Character
特殊字符的转义
常见的转义字符的转义序列
转义序列 名称
Unicode
\b
退格
\u0008
\t
制表
\u0009
\n
换行
\u000a
\r
回车
\u000d
\"
双引号
\u0022
\'
单引号
\u0027
\
反斜杠
\u005c
4. 布尔类型
boolean类型有两个值:false和true,用来进行逻辑判断条件, 整型和布尔类型之间不能进行相互转换。
四、变量与常量
1.变量
变量名要求:
Ⅰ 变量名见名思义
Ⅱ 不建议采用下划线和 $ 开头或者结尾
Ⅲ 是小驼峰的形式
Ⅳ 不要以数字开头
Ⅴ 最好不要用拼音来命名。
Ⅵ 不能使用Java的保留字作为变量名
2. 常量
① 字面常量
② final关键字修饰的常量
关键字final表示这个变量只能被赋值一次,一旦赋值就不能被修改了。一般这样定义的常量采用全大写来表示。
若用static final修饰则为一个类常量,它可以在一个类中的多个方法中使用,它通常定义在main方法的外部。如果这个常变量是一个public的,则在其它类的方法中也可以使用。
五、数据类型的转换
1. 自动转化
数据类型自动转换:将取值范围小的类型自动转换为取值范围大的类型。
public class DataDemo {
public static void main(String[] args) {
int a = 1;
byte b = 2;
// byte c = a + b;
// int类型和byte类型运算,结果是int类型
int c = a + b;
System.out.println(c);
}
}
转换规则:
范围小的类型向范围大的类型提升:byte、short、char 运算时候直接提升为 int。
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double。
2. 强制类型转换
强制类型转换:将 取值范围大的类型强制转换成取值范围小的类型 。
public class DataDemo2 {
public static void main(String[] args) {
/**
* int a=1.5; 编译失败,无法赋值
*/
int i = (int)1.5;
double d=2.5;
//int类型和double类型运算,结果是double类型
//int类型会提升为double类型
double e = d + i;
System.out.println(e);
}
}
浮点转成整数,直接取消小数点,可能造成数据损失精度。
int 强制转成 short 砍掉2个字节,可能造成数据丢失。