JAVA语法细节(1)

时间:2021-10-12 07:09:42

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;

此时编译器不会报错,能正常运行,“+=”是一个赋值运算符,在赋值前会自动检查是否超出了作用范围。