- 1.类型转换
- 1.1 int和long/double相互赋值
- 1.2 int和boolean相互赋值
- 1.3 强制类型转换
- 1.4 int和String之间的相互转换
- 2.运算符
- 2.1 算数运算符
- 2.2 关系运算符
- 2.3 逻辑运算符
- 2.4 位运算符
- 2.5 移位运算符
- 2.6 条件运算符
int a = 10; long b = 20; a = b; // 编译出错, 提示可能会损失精度. b = a; // 编译通过. int a = 10; double b = 1.0; a = b; // 编译出错, 提示可能会损失精度. b = a; //编译通过
结论:和double表示的范围更大,可以将int赋值给long或者double,反之不行。这种转换是隐式转换。
1.2 int和boolean相互赋值int a = 10; boolean b = true; b = a; // 编译出错, 提示不兼容的类型 a = b; //编译出错,不兼容
结论:int和boolean是两种毫不相关的类型,不能相互赋值。
1.3 强制类型转换int a = 0; double b = 10.5; a = (int)b; int a = 10; boolean b = false; b = (boolean)a; //编译出错,不兼容 byte a = 128; //报错 byte b = (byte)128; //通过 byte a = 10; byte b = 20; byte c = a + b; //报错 byte c = (byte)(a + b); //通过
结论:
强制类型转换可以将范围大的变量值赋值给范围小的变量,但是可能会有精度丢失。在进行算术运算时,若类型范围小于int类型的范围会自动提升为int类型,想要赋值给原来的类型,需要用强制类型转换。
1.4 int和String之间的相互转换int转String
int a = 10; //方法一 String str1 = a + ""; //方法二 String str2 = String.valueif(a);
String转int
String str = "100"; int a = Integer.parseInt(str);
注:若str的双引号内不是整型,则会报错。
2.运算符 2.1 算数运算符- 基本四则运算符 + - * / %
需要注意的有以下几点:
a) int/int结果还是int,若需要得到小数结果,则需要使用double。
int a = 1; int b = 2; System.out.println(a / b); // 结果为 0
b) 0不能为除数。
int a = 1; int b = 0; System.out.println(a / b) // 运行结果 Exception in thread "main" java.lang.ArithmeticException: / by zero at Test.main(Test.java:39)
c) %还可以对小数使用。
System.out.println(11.5 % 2.0); // 运行结果 1.52.2 关系运算符
关系与运算符主要有六个:
== != < > <= >=
只需要注意一点,关系运算符的表达式返回值都是boolean类型。
2.3 逻辑运算符逻辑运算符主要有三个:
&& || !
逻辑与 &&:两个操作数都为 true, 结果为 true, 否则结果为 false。
逻辑或 ||:两个操作数都为 false, 结果为 false, 否则结果为 true。
逻辑非 !:操作数为 true, 结果为 false; 操作数为 false, 结果为 true(这是个单目运算符, 只有一个操作数)。
其中&&和||符合短路求值的规则:
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true
上面说到,若将0作为除数则会报错,为什么在这里不会报错呢?说明程序根本就没有运行到10 / 0这一步,这正是因为短路的问题,在&&中,当左侧的运算结果为false时,就不会继续运算,直接返回false。在||中,当左侧运算结果为true时,不会继续运算,直接返回true。
2.4 位运算符位运算符主要有四个:
& | ~ ^
按位与 &:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0。
按位或 |:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1。
按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0。
按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1。
2.5 移位运算符移位运算符有三个:
<< >> >>>
左移 <<: 最左侧位不要了, 最右侧补 0。
右移 >>: 最右侧位不要了, 最左侧补符号位 比特科技 (正数补0, 负数补1)。
无符号右移 >>>: 最右侧位不要了, 最左侧补 0。
2.6 条件运算符条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
// 求两个整数的最大值 int a = 10; int b = 20; int max = a > b ? a : b;
也是Java中唯一的一个三目运算符。



