什么是变量
JAVA是强类型语言,在运算过程中值可以发生改变的是变量,反之是常量。或者说,变量就是可变的量。 声明变量的格式是:
//数据类型 变量名 = 赋值;
int n = 2;
补充一点,变量在声明的同时会根据数据类型来分配空间大小。
变量的种类
基本的变量类型有3类8种,并且在声明变量的时候,内存占用大小就已经确定了。
第一类:数值-整型
- 只要声明为指定的数据类型,在内存中直接分配对应的空间大小
- 相同数据类型中:1和100占的内存空间是相同的
- 整型默认的数据类型为int
- 声明long类型数值的时候,如果超出int的范围,需要在数字后加L或者l ,推荐L
- 每一个整型数字都有对应的二进制数
类型 | 长度(字节) | 位数 | 变化种类 | 表数范围 |
byte | 1 | 8 | 28=256 | [-128 ~ 127] |
short | 2 | 16 | 216=65536 | [-32768 ~ 32767] |
int | 4 | 32 | 232= 42E | [±21亿] [-231 ~ 231-1] |
long | 8 | 64 | 264 | ±263 |
byte b1 = 10;
short s1 = 1;
short s2 = 32767;
int a = 100;
int b3 = 1134567890;
long l1 = 2234567890L;
第二类:数值-浮点型
- 声明的含有小数的数值
- 浮点数很多时候是不能精确的转换为二进制数的
- 只能根据数据类型的长度截取指定的长度,剩下的部分被舍弃
- 根据IEEE754的二进制浮点数算术标准,浮点数 0.1 + 0.2 != 0.3 ( != 意为不等于)
- 声明double和float可以直接对应整型数字
- 浮点型默认的类型为double
- 如果声明float的时候需要在后面添加 F 、f
类型 | 长度(字节) | 位数 | 变化种类 | 表数范围 |
float | 4 | 32 | 1(符号) + 8(指数) + 23(尾数) | 2-127 ~ 2128 |
short | 2 | 16 | 1 + 11 + 52 | 2-1023,21024 |
- 符号位:标识这个浮点数的正负
- 指数位:计算浮点数的指数 【-127,128】
- 尾数位: 小数点后面的数据
float f1 = 0.1f;
short s1 = 100;
第三类:布尔
类型 | 长度(字节) | 位数 | 变化种类 | 表数范围 |
boolean | 1 | 1 | 2 | true, false |
boolean flag = true;
boolean b1 = false;
第四类:字符
类型 | 长度(字节) | 位数 | 变化种类 | 表数范围 |
char | 2 | 16 | 65536 | 最多存放65536个字符 |
char c1 = 'A';
char c2 = 65; // 根据ASCII表,c2输出与c1相同也是'A'。
数据类型转换
隐式的数据类型转换
-
小类型可以自动转化为大类型
- 特例:声明变量的时候,可以直接将int的值赋值给byte short
- int的值不能超出byte short的表值范围
-
当进行数学运算的时候
- 小类型默认转化为大类型
-
整型与整形进行计算,得到的还是整型结果
-
基本类型转换图
- 不丢失精度
- byte -> short -> int -> long
- char -> int -> long
- int -> double
- float -> double
- 丢失精度
- int -> float
- long -> float
- long -> double
- 从大的转成小的都是丢失
注意:
- 如果运算没有比int类型更大的数据参数运算,最终的结果会自动提升成为int类型。
- 如果参数运算的有比int更大的类型,自动提升成为最大的数据类型
- 从大的转成小的都是丢失
- 如果要给比int范围小的byte,short,char赋值的时候,在其范围内的常量就能够成功赋值
- 不丢失精度
强制数据类型转换
- 从大类型转成小类型
- 转换的语法格式为
- 小类型 = (小类型) 大类型;
- 整型将大类型转成小类型的时候,只从右向左截取小类型所需要的长度
- 得到的数字相对是很随机的
- 浮点型将double转成float是算出来的
- 将来不要使用浮点数比较大小
- 如果确定需要比较浮点数,需要确定保留多少位有效数字,然后转成整型再进行比较
变量作用域
不能使用未经声明的变量
- 局部变量
- 当前方法中,声明变量之后都可以访问到这个局部变量
- 局部变量在使用之前必须先赋值
- 块级作用域
- 全局变量
- 定义在类中,可以被类中方法所使用
- 先后顺序都可以,但是推荐变量定义在类的最上方
- 全局变量如果没有赋值,会默认给予一个初始值,
- 首先在内存中申请变量类型长度的空间,全部填充为0
- 整型:0
- 浮点:0.0
- 字符:\u0000
- 布尔:0–>false
- 引用数据类型: null