变量和数据类型
变量和数据类型
1. 变量(Variable)
1.1 什么是变量?
变量就像数学中的代数符号,比如:
1 | |
Java 中变量分为两类:
- 基本类型变量(primitive type)
- 引用类型变量(reference type)
1.2 定义变量
Java 变量必须 先定义再使用:
1 | |
不写初始值时,会使用类型的 默认值(0)。
示例:定义并打印变量
1 | |
1.3 变量可重新赋值
1 | |
注意:重新赋值时 不能重复写类型。
1.4 变量之间的赋值
1 | |
重新赋值只改变变量对应的内存单元。
2. 基本数据类型(Primitive Types)
基本类型是 CPU 可以直接运算的数据类型。
Java 基本类型包括:
| 类型 | 描述 |
|---|---|
| byte | 整数 |
| short | 整数 |
| int | 整数 |
| long | 整数 |
| float | 浮点数 |
| double | 浮点数 |
| boolean | 布尔值 |
| char | 字符 |
3. 计算机内存基础
- 最小单位:byte(字节) = 8 bit(8位二进制数)
- 每个字节有一个 内存地址
- byte的二进制表示范围从
00000000~11111111,换算成十进制是0~255,换算成十六进制是00~ff
单位换算:
1 | |
例如 4TB 内存即 4398046511104 字节。
4. 整型(Integer Types)
Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)
| 类型 | 范围 | 占用 |
|---|---|---|
| byte | -128 ~ 127 | 1 byte |
| short | -32768 ~ 32767 | 2 bytes |
| int | -2147483648 ~ 2147483647 | 4 bytes |
| long | -2^63 ~ 2^63-1 | 8 bytes |
示例
1 | |
5. 浮点型(Floating Point Types)
浮点类型的数就是小数,因为小数用科学计数法表示的时候,小数点是可以“浮动”的,如1234.5可以表示成12.345x102,也可以表示成1.2345x103,所以称为浮点数
| 类型 | 范围 | 占用 |
|---|---|---|
| float | 约 ±3.4×10^38 | 4 bytes |
| double | 约 ±1.79×10^308 | 8 bytes |
示例
1 | |
注意:float 必须加 f 后缀。
6. 布尔类型(Boolean)
布尔类型boolean只有true和false两个值,布尔类型总是关系运算的计算结果:
1 | |
Java语言对布尔类型的存储并没有做规定,因为理论上存储布尔类型只需要1 bit,但是通常JVM内部会把boolean表示为4字节整数
7. 字符类型(char)
可以表示:
- ASCII 字符
- Unicode 字符
1 | |
注意:
- 使用 单引号
'A' - 与字符串
String使用的双引号不同
8. 引用类型(Reference Types)
除了上述基本类型的变量,剩下的都是引用类型。例如,引用类型最常用的就是String字符串:
1 | |
引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置
9. 常量(final)
加 final 修饰后不可再赋值:
1 | |
常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。
常量的作用是用有意义的变量名来避免魔术数字(Magic number),例如,不要在代码中到处写3.14,而是定义一个常量。如果将来需要提高计算精度,我们只需要在常量的定义处修改,例如,改成3.1416,而不必在所有地方替换3.14。
为了和变量区分开来,根据习惯,常量名通常全部大写。
10. var 关键字(Java 10+)
可省略变量类型,由编译器推断:
1 | |
相当于:
1 | |
只是更简写,不会改变类型本身。
11. 变量的作用范围(Scope)
在Java中,多行语句用{ ... }括起来。很多控制语句,例如条件判断和循环,都以{ ... }作为它们自身的范围,例如:
1 | |
只要正确地嵌套这些{ ... },编译器就能识别出语句块的开始和结束。而在语句块中定义的变量,它有一个作用域,就是从定义处开始,到语句块结束。超出了作用域引用这些变量,编译器会报错。举个例子:
1 | |
推荐原则:
- 变量作用域越小越好
- 避免重复使用变量名
12. 小结
- Java 有两类变量:基本类型 与 引用类型
- 基本类型包括:整数、浮点、布尔、字符
- 变量可重复赋值,
=是赋值,不是等号 - 常量(final) 初始化后不可改变
var可自动推断类型- 变量作用域受
{}控制,应尽可能缩小作用域