目录
类型转换
自动类型转换
表达式的自动类型转换
强制类型转换
运算符
基本运算符
案例解答
+连接字符串
自增自减运算符
面试习题
赋值运算符
比较运算符
逻辑运算符
基本逻辑运算符
短路逻辑运算符
三元运算符
基础知识
拓展案例
运算符优先级
读取用户输入
类型转换
自动类型转换
类型范围小的变量,可以直接赋值给类型范围大的变量。
public class AutoTypeTran {public static void main(String[] args) {char a = 'a';int res = a;System.out.println(a);System.out.println(res);}
}
表达式的自动类型转换
- 表达式的最终结果类型由表达式中的最高类型决定;
- 表达式中,byte、short、char 是直接转换成int类型参与运算的;
public class AutoTypeTran2 {public static void main(String[] args) {byte a = 'a';short b = 21;double c = 4.25;double res = a + b + c;System.out.println(res);// byte、short、char是直接转换成int类型参与运算的;byte d = 'e';short e = 156;// byte m = d + e; // 报错int m = d + e;System.out.println(m);}
}
强制类型转换
数据类型 变量 = (数据类型) 变量/数据;
- 可能出现数据丢失;
- 小数强制转换成整数是直接截断小数保留整数。
public class TypeTran {public static void main(String[] args) {// 正常强制类型转换int a = 20;byte res = (byte) a;System.out.println(res); // 20// 溢出 / 数据丢失int b = 800;res = (byte) b;System.out.println(res); // 32// 浮点数强转成整型double score = 99.5;int res2 = (int) score;System.out.println(res2); // 99}
}
运算符
基本运算符
符号包括:+ - * / %
对应的含义:加 减 乘 除 取余
!需要注意:在Java中两个整数相除,得到的还是整数
public class Operation {public static void main(String[] args) {// 加、减、乘、除、取余int a = -110;int b = 15;System.out.println(a + b); // -95System.out.println(a - b); // -125System.out.println(a * b); // -1650System.out.println(a / b); // -7 [去除小数点后面的数据]System.out.println(a % b); // -5// 补充:整数除以整数想要得到小数System.out.println(1.0 * a / b); // -7.333333333333333}
}
案例解答
解析3位整数的百位、十位、个位的数字,并输出。
public class CaseOperation {public static void main(String[] args) {int pendingData = 123;System.out.print("这是个位:");System.out.println(pendingData % 10);System.out.print("这是十位:");System.out.println(pendingData / 10 % 10);System.out.print("这是百位:");System.out.println(pendingData / 10 / 10 % 10);}
}
+连接字符串
‘+’符号与字符串运算的时候用作连接符,结果是字符串。
public class ConnectString {public static void main(String[] args) {int a = 20;System.out.println(a + "abcd"); // 20abcdSystem.out.println(a + 'a'); // 117System.out.println(a + 20 + 'a' + "abcd"); // 137abcdSystem.out.println("abcd" + a + 20 + 'a'); // abcd2020a}
}
自增自减运算符
++ 和 -- 既可以放在变量的后边,也可以放在变量的前面;
++ 和 -- 只能操作变量,不能操作字面量;
放在变量的前面,则是先运算,放在变量后面,则是先取值;
public class AddSelf {public static void main(String[] args) {int i = 10;int j = i++;System.out.println(i); // 11System.out.println(j); // 10int a = 10;int b = ++a;System.out.println(a); // 11System.out.println(b); // 11}
}
面试习题
推测下面的输出
public class AddSelfCase {public static void main(String[] args) {int c = 10;int d = 5;// c 10 11 12 11// d 5 4 5// res = 10 + 12 - 4 - 5 + 1 + 12int res = c++ + ++c - --d - ++d + 1 + c--;System.out.println(c); // 11System.out.println(d); // 5System.out.println(res); // 26}
}
赋值运算符
基本赋值运算符:=
拓展赋值运算符:+=、-=、*=、/=、%=
其中拓展赋值运算符:a += b 等价于 a = (a 的数据类型) (a + b);
public class Assignment {public static void main(String[] args) {byte a = 10;byte b = 30;// a = a + b; // 报错a += b; // 等价于 a = (byte) a + b;}
}
比较运算符
public class Comparative {public static void main(String[] args) {int a = 10;int b = 10;System.out.println(a == b); // trueSystem.out.println(a != b); // falseSystem.out.println(a > b); // falseSystem.out.println(a < b); // falseSystem.out.println(a >= b); // trueSystem.out.println(a <= b); // true// 下面不是比较运算符,只是用来对比观察System.out.println(a = b); // 10}
}
逻辑运算符
基本逻辑运算符
符号 | 介绍 | 说明 |
& | 逻辑与 | 两者全为 true ,结果才为 true |
| | 逻辑或 | 两者有一个为 true ,结果就是 true |
! | 逻辑非 | 相反 |
^ | 逻辑异或 | 相同为false,不同为true |
短路逻辑运算符
符号 | 介绍 |
&& | 逻辑与(左边为 false ,右边则不执行) |
|| | 逻辑或(左边为 true, 右边则不执行) |
注意:实际开发中,常用的逻辑运算符还是:&&、||、!
public class Logical {public static void main(String[] args) {int a = 10;double money = 800;System.out.println(a > 5 & money > 500);System.out.println(a > 11 && money++ > 500);System.out.println(money);// true// false// 800.0}
}
三元运算符
基础知识
格式:条件表达式 ? 值1 : 值2;
执行流程,首先计算关系表达式的值,如果是 true , 返回值1;否则返回值2.
public class Ternary {public static void main(String[] args) {// 格式:条件表达式 ? 值1 : 值2;// 需求: 找出两个整数中较大的值int a = 10;int b = 20;int res = a > b ? a : b;System.out.println(res);}
}
拓展案例
求三个整数的最大值
public class Ternary2 {public static void main(String[] args) {int a = 10;int b = 20;int c = 3343;int temp = a > b ? a : b;int max = temp > c ? temp: c;System.out.println(max);System.out.println("--------------方法二--------------");max = a > b ? (a > c ? a : c) : (b > c ? b : c);System.out.println(max);}
}
运算符优先级
优先级 | 运算符 |
1 | () |
2 | !、-、++、-- |
3 | *、*、% |
4 | +、- |
5 | <<、>>、>>> |
6 | <、<=、>、>=、instanceof |
7 | ==、!= |
8 | & |
8 | ^ |
10 | | |
11 | && |
12 | || |
13 | ?: |
14 | =、+=、-=、*=、/=、%=、&= |
public class Priority {public static void main(String[] args) {int a = 10;System.out.println(a > 5 || a > 5 && a > 15);System.out.println((a > 5 || a > 5) && a > 15);// true// false}
}
读取用户输入
- 导包:import java.util.Scanner;
- 创建扫描器对象:Scanner sc = new Scanner(System.in);
- 接收用户输入的数据:sc.nextInt(); 或者 sc.next();
import java.util.Scanner;public class ScannerDemo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输出您的名字:");String name = sc.next();System.out.println("请输出你的年龄:");int age = sc.nextInt();System.out.println("Hello " + name + ", 你已经" + age + "岁了!");}
}