文章目录
- 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 条件运算符
1.类型转换
1.1 int和long/double相互赋值
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.5
2.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中唯一的一个三目运算符。