Java基础语法
字面量(直接量)
概述
字面量,也叫直接量: 是指在Java程序中固定不变的数据。
分类
书写形式
除了通常的十进制书写形式,整数直接量
也经常写16进制的形式(以0X或0x开头)或8进制的形式(以0开头)。
基本数据类型
四类八种基本数据类型: |
---|
![]() |
所以 |
---|
问题一:整数直接量超出了整数的范围
如果直接写出的整数超过了int的表达范围,将出现编译错误。
int d = 10000000000;
以上代码中,10000000000不属于int类型的直接量,因为Java认为所以直接写出的整型都是int类型,而这个数值超过了int的表达范围。
问题二:整数运算的溢出
两个整数进行运算时,其结果可能会超过整数的范围而溢出。
int a = 2147483647;
int b = -2147483648;
a = a + 1;
b = b - 1;
System.out.println("a=" + a);
System.out.println("b=" + b);
上述代码运行后的输出结果为:
a = -2147483648
b = 2147483647
变量a最初值为2147483647,是int类型的最大值,加1后出现溢出现象,a的值变成了int类型的最小值。而b变量最初赋的值为-2147483648,是int类型的最小值,减1后出现溢出现象,b的值变成了int类型的最大值。这显然不符合加法和减法的规则,所以,今后使用的时候要注意类似的问题。
问题三:浮点数存在舍入误差问题
由于浮点数内部使用二进制的方式来表示十进制,会存在舍人误差。二进制系统中无法精确的表示1/10,就像十进制系统中无法精确表示1/3 一样。对于一些要求精确运算的场合会导致代码的缺陷。
double money = 3.0;
double price = 2.9;
System.out.println(money - price);
上述代码运行后的输出结果为:
0.10000000000000009
如果需要精确的运算可以考虑放弃使用double或float而采用BigDecimal类来实现。
数据类型的转换
Java程序要求参与的计算的数据,必须要保证数据的一致性,如果数据类型不一致将发生类型的转换。
自动转换
转换原理图解
byte
l类型内存占一个字节,在和int类型运算时会提升为int类型,自动补充3个字节,因此计算后的结果还是int类型。
转换规则
强制转换
转换原理图解
注意
+=符号的扩展
下面的程序有问题吗?
public static void main(String[] args) {
short s = 1;
s += 1;
System.out.println(s);
}
字面量和变量的运算
下面的程序有问题吗?
public static void main(String[] args) {
byte b1 = 1;
byte b2 = 2;
byte b3 = 1 + 2;
byte b4 = b1 + b2;
System.out.println(b3);
System.out.println(b4);
}
选择语句 – – switch
格式
switch (表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default: 语句体n+1;
break;
}
表达式数据类型
表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。
case的穿透性
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会再判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
if(…)中关系运算符的短路运算
对于&& :当第一个条件不满足时,后面的就不再计算,哪怕后面是类似于 5/0这种运行一定会报错的表达式
对于|| :当第一个条件满足时,后面的条件就不参与运算