一,数据类型
在Java中数据类型分为两类:基本数据类型和引用数据类型
基本数据类型有四类八种
四类:整形,浮点型,字符型,布尔类型
八种:
| 数据类型 | 关键字 | 内存占用 | 范围 | 包装类 |
|---|---|---|---|---|
| 字节型 | byte | 1字节 | -128~127 | Byte |
| 短整型 | short | 2字节 | -32768~32767 | Short |
| 整形 | int | 4字节 | Integer | |
| 长整形 | long | 8字节 | Long | |
| 单精度浮点型 | float | 4字节 | 有范围,一般不关注 | Float |
| 双精度浮点型 | double | 8字节 | 有范围,一般不关注 | Double |
| 字符型 | char | 2字节 | 0~65535 | Character |
| 布尔类型 | boolean | 没有明确规定 | true和false | Boolean |
注意:
- 无论是32位还是64位电脑,数据类型的内存大小都是规定的大小。
- 整形和浮点型都是有符号的
- 整形默认是int,浮点型默认是double
- 字符串String属于引用类型
二,字面常量
常量即程序运行期间不变的量
字面常量的分类
- 字符常量:由单引号引起的,如:'a','1'
- 字符串常量:由双引号引起的,如:"hello","123","你好"
- 整形常量:程序中直接写的整形数字,如:123
- 浮点数常量:程序中直接写的小数,如:1.1
- 布尔常量:只有true和false
- 空常量:null
三,变量
对于经常变化的量称为变量:例如身高,体重,年龄
数据类型就是来定义不同的变量的
数据类型 变量名 = 初始值 //没有初始值会报错
3.1 字节型变量
byte a = 10; System.out.println(Byte.MAX_VALUE);//输出最大值 System.out.println(Byte.MIN_VALUE);//最小值
3.2 短整型变量
short b = 20; System.out.println(Short.MAX_VALUE); System.out.println(Short.MIN_VALUE);
3.3 整形变量
int c = 100; System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_VALUE);
3.4 长整型变量
long d = 10L;//为了区分int和long,long一般加一个大写L System.out.println(Long.MAX_VALUE); System.out.println(Long.MIN_VALUE);
3.5 单精度
float e = 1.1f;//默认是double类型,为了区分就加一个f,F也行 System.out.println(Float.MAX_VALUE); System.out.println(Float.MIN_VALUE);
由于表⽰的数据精度范围较⼩,⼀般在⼯程上用到浮点数都优先考虑double,不太推荐使⽤float
3.6 双精度
int a = 1; int b = 2; System.out.println(a/b);//输出0 double c = 1.0; double d = 2.0; System.out.println(c/d);//输出0.5
如果除法两边都是整数就执行整数除法,有一个小数就执行小数除法
小数因为在内存中存储形式比较特殊,尝试使⽤有限的内存空间表⽰可能⽆限的⼩数,势必会存在⼀定的精度误差,因此浮点数是个近似值,并不是精确值。
3.7 字符型
因为Java中使⽤Unicode表⽰字符char大小为两个字节,所以char可以存中文字符
char c1 = '我'; System.out.println(c1);
3.8 布尔类型
注意:布尔类型只有true和false两个值,java只有这两个值表示真假
3.9 类型转换
3.9.1 隐式类型转换(隐式)
代码不需要经过任何处理,在代码编译时,编译器会⾃动进⾏处理。
特点:数据范围⼩的转为数据范围⼤的时会⾃动进⾏。
int a = 100; long b = 10L; b = a;//可以把小的赋给大的 a = b;//报错
3.9.2 强制性类型转换(显式)
int a = 100; long b = 10L; a = (int)b;//强制类型转换会丢失数据 byte b1 = 100;//100默认为int,没有超过byte的范围,隐式转换 byte b2 = (byte)257;//257默认为int,超过了范围,需要强转
程序员需要对强制类型转换负责
3.9.3 类型提升
不同类型的数据之间相互运算时,数据类型⼩的会被提升到数据类型⼤的。
int a = 10; long b = 20L; a = a+b;//报错,int提升为long,最后a+b的类型是long,不能赋给int a += b; System.out.println(a);//输出50
![]()
复合赋值会发生隐式类型转换
byte和byte的计算
byte a = 10; byte b = 20; byte c = a + b; //编译出错 System.out.println(c);
结论:byte和byte都是相同类型,但是出现编译报错.原因是,虽然a和b都是byte,但是计算a+b会先将a和b都提升成int,再进⾏计算,得到的结果也是int,这是赋给c,就会出现上述错误.(涉及到内存对齐)
正确写法
byte a = 10; byte b = 20; byte c = (byte)(a + b); System.out.println(c);
小结:
- 不同类型的混合运算,范围小的会转换为范围大的计算
- 小于4字节的如:byte,short会转换为int计算
字符串类型
字符拼接
String s1 = "hello"; String s2 = "world"; System.out.println(s1+s2);//helloworld //字符串可以拼接在一起
int转String
- 数字+空字符串
- String.valueOf方法
int a = 10; String s1 = a + ""; String s2 = String.valueOf(a);
String转int
Integer.parseInt(str)方法
String s3 = "10"; int num = Integer.parseInt(s3);













