1.数据类型
数据类型分类
Java的数据类型分为两⼤类:
- 基本数据类型:包括 整数 、 浮点数 、 字符 、 布尔 。
- 引⽤数据类型:包括 类 、 数组 、 接⼝ 、枚举 、注解 。
整数运算的溢出
两个整数进⾏运算时,其结果可能会超过整数的范围⽽溢出,请看如下代码:
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类型的最⼤值。
2.运算符
算数运算符
算数运算符 | 作用 |
---|---|
1. | 加法运算,字符串拼接运算 |
2. | 减法运算 |
3. | 乘法运算 |
/ | 除法运算,整除 |
% | 取模运算,两个数字相除取余数 |
++ 、 – | ⾃增⾃减运算 |
++a和a++的区别
++ 运算,变量⾃⼰增⻓1。
-
独⽴运算:
变量在独⽴运算时, 前++ 和 后++ 没有区别 。
变量 前++ :例如 ++i 。
变量 后++ :例如 i++ 。 -
混合运算:
和其他变量放在⼀起, 前++ 和 后++ 就产⽣了不同。
变量 前++ :变量a⾃⼰加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
public static void main(String[] args) {
int a = 1;
int b = ++a;
System.out.println(a); // 计算结果是2
System.out.println(b); // 计算结果是2
}
变量 后++ :变量a先把⾃⼰的值1,赋值给变量b,此时变量b的值就是1,变量a⾃⼰再加1。a的结果是2,b 的结果是1。
public static void main(String[] args) {
int a = 1;
int b = a++;
System.out.println(a); // 计算结果是2
System.out.println(b); // 计算结果是1
}
逻辑运算符
逻辑运算符 | 作用 |
---|---|
&& 短路与 | 两边都是true,结果是true ⼀边是false,结果是false 短路特点:符号左边是false,右边不再运算 |
II 短路或 | 两边都是false,结果是false ⼀边是true,结果是true 短路特点: 符号左边是true,右边不再运算 |
! 取反 | . ! true 结果是false. ! false 结果是true |
三元运算符
数据类型 变量名 = boolean ? v1 : v2
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量
位移运算符
左移操作符 ( <<):
- 按照操作符右侧指定的位数将左边的操作数向左边移动(高位移除,在低位补0);
- 当左移的操作数是int类型时,每移动一位它的第31位就要被移除(位数以第0位开始)
- 意义:在没有数字溢出的前提下,左移1位相当于乘以2的1次方,左移n位相当于乘以2的n次方.
右移操作符(>>):
- 按照操作符右侧指定的位数将操作符左边的操作数向右移动(采用符号扩展机制);
- 符号扩展进行移位,即:若符号为正,则在高位插入0,若符号为负,则在高位插入1(符号位保持不变);
- 当左边的操作数为byte、short类型时,它们会被转换为int类型,其结果要是int类型。
- 右移一位相当于除以2,右移n位相当于除以2的n次方
“无符号”右移操作符(>>>):
value >>> num value指定移动的值 num指定移动的位数
- 按照操作符右侧指定的位数将操作符左边的操作数向右移动(0扩展机制);
- 移位过程中,无论数值是正数还是负数,都在最高位补0
- 只对32位和64位值有意义