1、变量的作用域
变量的作用域从变量定义的位置开始,到变量所在的那对大括号结束。变量定义内存开辟一块空间用于该变量,变量到达作用域时,该变量从内存中消失。
2、变量的数据类型
变量基本数据类型:byte、short、int、long、float、double、char、boolean
byte b = 3;
short s = 4000;
int x = 12;
long l = 123l; //定义的数据后需加‘l’代表定义的是long型变量
float f = 2.3f; //定义的数据后需加‘f’代表定义的是float型变量
double d = 3.4;
char ch = '1';
boolean bl = true;
注意:Java中所有的常数默认都是int类型的数据,当定义byte x=9;时,编译器自动检查所赋值是否超出定义的类型范围,若没超出范围正常定义,若超出范围,编译器报错,“可能会损失精度”。
变量的自动类型转换:
byte x = 1, m = 2; //定义了一个byte型数据x
int y = 2; //定义了一个int型数据y
y = x+m; //自动将x+m的类型转换成int类型
变量的强制类型转换:
short a = 23;
int b = 34;
b = (int)a;
3、使用变量时需注意一些情况
byte a = 1;
byte b = 2;
b = a+b;
这种情况下编译器会报错,“可能会损失精度”。
int a = 1;
int b = 2;
b = a+b;
这种情况,编译器不会报错,能正常运行。这是因为在Java中两个byte型的数据相加如果两个数据比较大结果可能会超过buyte型变量的所属范围,编译器会提示可能会损失精度。而两个int型的数据相加,若超出范围则向前进位,但只取低32位的有效数据,所以编译器不会报错。
4、运算符a++,++a,+=
(1) 当a++,和++a单独存在时,这两个运算语句的结果是相同的,都相当于a = a + 1;
(2)当a++或++a参与运算时,结果就不相同了
class VarDemo2
{
public static void main(String[] args)
{
int a = 1, b, c;
b = a++;
c = ++a;
System.out.println("a="+a+",b="+b+",c="+c);
}
}
编译、运行后输出“a=3,b=1,c=3”,当a++参与运算时,b=a++这条语句执行时,内存中先开辟出一个临时变量存储a的值,然后运行a++,此时a的值为2,然后将a++的值(即开辟的临时变量的值)赋给b,运行c=++a;时,a自加一次,此时a的值为3,将a的值赋给c。
(3)+=是一个赋值运算符,
byte a = 9;
a = a+1;
此时编译器报错,提示“可能会损失精度”,原因如上文所述。
byte a = 9;
a += 1;
此时编译器不会报错,能正常运行,“+=”是一个赋值运算符,在赋值前会自动检查是否超出了作用范围。