1. 变量的定义
数据保存在内存单元中,每个内存单元都用一个标识符来标识,这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。
2. 变量的数据类型
Java对变量的数据类型有严格的限定。
在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值。
Java中,变量的数据类型分为基本数据类型和引用数据类型。如图:
2.1 整数类型变量
整型类型变量用来存储整数数值。整数类型分为4中:
类型名 | 占用空间 | 取值范围 |
---|---|---|
byte | 8位(1个字节) | -27 ~ 27-1 |
short | 16位(2个字节) | -215 ~ 215-1 |
int | 32位(4个字节) | -231 ~ 231-1 |
long | 64位(8个字节) | -2^63 ~ 263-1 |
注意:整数默认为int类型,对于long型而言:
// 所赋的值超出了int型的取值范围,后面必须加上字母L或l
long num1 = 1234567890L;
// 所赋的值未超出int型的取值范围,后面可以加上字母L或l
long num2 = 198L;
// 所赋的值未超出int型的取值范围,后面可以省略字母L或l
long num2 = 198;
2.2 浮点数类型常量
浮点数用来存放小数数值,浮点数分为单精度浮点数(flooat)和双精度浮点数(double),double比float表示的小数更精确。小数会被默认为double类型。
类型名 | 占用空间 | 取值范围 |
---|---|---|
float | 32位(4个字节) | 1.4E-45 ~ 3.4E+38, -3.4E+38 ~-1.4E-45 |
double | 64位(8个字节) | 4.9E-324 ~ 1.7E+308, -1.7E+308~-4.9E-324 |
E可以写成e,表示以10为底的只是 E后面的+-表示正反指数 1.4E-45表示 1.4*10-45
注意:
在为一个float类型的变量赋值时,所赋值的后面一定要加上字母F或f。
为double 类型的变量赋值时,后面可以加上D或d,也可以不加。
整数也是可以赋值给浮点类型。
2.3 字符类型变量
字符类型变量用来存储一个单一字符,用char表示。
在为char赋值时,需用用一对英文半角格式的单引号把字符括起来。
可以将char类型的变量赋值为0~65535范围内的整数。(97对于字符为’a’)。
char c = 'a';// 为一个char类型的变量赋值字符a
char ch = 97;//为一个char类型的变量赋值整数97,相当于赋值字符a
2.4 布尔类型变量
布尔类型变量用来存储布尔值,在java中用boolean表示。
该类型只有两两个值,即true
和false
。
3. 变量的类型转换
将一种数据类型的值赋值给另一种数据类型的的变量。分为自动类型转换和强制类型转换。
3.1 自动类型转换
也称隐式类型转换。
前提:两种数据类型彼此兼容;目标类型的取值范围大于源类型的取值范围。
byte b = 3;
int x = b; //将byte类型的变量b转换成了int类型,无需特殊声明。
注意:变量在表达式中进行运算时,也有可能发生自动类型转换,如byte型变量在运算期间类型会自动提升为int型。
3.2 强制类型转换
也称显示类型转换。
把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小是变量。
格式:目标数据类型 变量名 = (目标类型)值;
byte a = 3;
byte b = 4;
// 强制类型转换,int -> byte
byte d = ( byte) (a + b);// a+b在运算期间,类型会自动提升为int,两个int相加,结果为int。
// 缺点: 会造成精度丢失问题
// boolean类型不能与其他基本数据类型相互转换。
3.3 变量的作用域
变量时先定义后使用:变量是在它的作用范围内才可以使用,这个作用范围称为变量的作用域。
变量一定会被定义在某一对大括号中,该大括号所包含的代码区域便是这个变量的作用域。
public class Test{
public static void main(String[] args){
int x = 12;
{
int y = 96;
System.out.println("x is " + x);
System.out.println("y is " + y);
}
y = x; // 这里会报错,y的范围在4-8行,这里不在它的作用域
}
}