JavaSE之运算符学习笔记
运算符和表达式
运算符
读字面量或者变量进行操作的符号
表达式
用运算符把字面量或者变量连接起来,符合Java语法的式子就可以称为表达式
不同运算符连接的表达式体现的是不是类型的表达式
算术运算符
分类及代码实现
符号 | 作用 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
package arithmetic;
public class ArithmeticDemo01 {
public static void main(String[] args) {
// +
System.out.println(3 + 2); // 5
// -
System.out.println(3 - 2); // 1
// *
System.out.println(3 * 2); // 6
// /
System.out.println(10 / 2); // 5
System.out.println(10 / 3); // 3
System.out.println(10.0 / 3); // 3.3333333333333335
// %
System.out.println(10 % 2); // 0
System.out.println(10 % 3); // 1
// 如果有小数参与运算
System.out.println(11.2 + 5.024); // 16.224
System.out.println(11.2 - 5.4); // 5.799999999999999
System.out.println(0.4 * 0.05); // 0.020000000000000004
}
}
【练习】数值拆分
-
题目:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台
-
代码实现
package arithmetic; import java.util.Scanner; // 导包 public class ArithmeticTest1 { // 程序的主入口 public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 创建对象 System.out.println("请输入一个三位数:"); int num = sc.nextInt(); // 接收对象 System.out.println("你输入的数是:" + num); System.out.println("个位:" + num % 10); System.out.println("十位:" + num / 10 % 10); System.out.println("百位:" + num / 100 % 10); } }
-
规则
个位:数字 % 10
十位:数字 / 10 % 10
百位:数字 / 100 % 10
千位:数字 / 1000 % 10
以此类推
这个公式可以记一下,以后不管是学什么程序,都会经历这么一题,可以和hello world相提并论。
数据类型转换(1)隐式转换
-
概念
取值范围小的数值转换成取值范围大的数值
-
取值范围
byte < short < int <long < float < double
-
转换规则
- 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,在进行运算。
- byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算
-
举例
int a = 10; double b = 13.14 ; System.out.println(a + b); // 23.14
数据类型转换(2)强制转换
-
概念
如果把一个取值范围大的数值,赋值给取值范围小的变量,是不允许直接赋值的,如果一定要这么做,就需要加入强制转换
-
格式
目标数据类型 变量名 = (目标数据类型)被强转的数据;
-
举例
int a = 10; double b = 13.14 ; int res = (int) (a + b); System.out.println((double) a); // 10.0 System.out.println((int) b); // 13 System.out.println(res); // 23
这两种强制转换的方式别的语言都是标配,只是语言不一样。
字符串和字符串加的操作
- 当
+
操作中出现字符串时,这个+
是字符串连接符,而不是算术运算符了。会将前后的数据进行拼接,并产生一个新的字符串- 连续进行
+
操作时,从左往右逐个执行
System.out.println("Hello" + "World"); // HelloWorld
System.out.println(1 + 1 + "Hello" + "World" + 1); // 2HelloWorld1
字符相加
当
字符+字符
或字符+数字
时,会把字符通过ASCII码表查询到对应的数字在进行计算。
System.out.println('A' + 1); // 66
System.out.println('a' + 1); // 98
System.out.println('a' + 'b'); // 195
字符和字符相加不是新的字符串,而是对应ASCII码,这一点我吃惊了,不过又验证如果是字符类型相加,会自动提升成int,
自增自减运算符
基本用法
符号 | 作用 | 说明 |
---|---|---|
++ | 加 | 变量的值加1 |
– | 减 | 变量的值减1 |
++
和--
既可以放在变量的前边,也可以放在变量的后边
两种用法
- 单独使用:
++
和--
无论是放在变量的前边还是后边,单独写一行结果是一样的。- 参与计算
int b = a++;
先用后加int b = ++a;
先加后用
-
单独使用
package ArithmeticOperator; public class ArithmeticDemo02 { public static void main(String[] args) { // ++和-- int a = 10; a++; System.out.println(a); // 11 ++a; System.out.println(a); // 12 a--; System.out.println(a); // 11 --a; System.out.println(a); // 10 } }
-
参与计算
package ArithmeticOperator; public class ArithmeticDemo02 { public static void main(String[] args) { // ++和++ int a = 10; int b = a++; int c = ++a; System.out.println(a); // 12 System.out.println(b); // 10 System.out.println(c); // 12 } }
a++
,先用后加。什么意思呢,他的执行顺序是:先b = a;
再a+1
,因此b=10
而
b++
,先加后用。他的执行顺序是:先a+1
再b = a;
,因为a++
的前面还有个a++
所以现在a=12
,又因为c=a
,所以c=12
这个知识点日常开发的时候用不到,一般都是用单行做写循环。但是考试要考。当时C语言这个知识点我一直弄不明白。考试的前一天还在看。
赋值运算符
分类
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | int a=10 ,将10赋值给变量a |
+= | 加后赋值 | a+=b , 将a+b的值给a |
-= | 减后赋值 | a-=b , 将a-b的值给a |
*= | 乘后赋值 | a*=b , 将a*b的值给a |
/= | 除后赋值 | a/=b , 将a/b的值给a |
%= | 取余后赋值 | a%=b , 将a%b的值给a |
+=
、-=
、*=
、/=
、%=
、底层都隐藏了一个强制类型转换
关系运算符(比较运算符)
分类
符号 | 解释 |
---|---|
== | 判断左边跟右边是否相等,如果成立就是true,如果不成立就是false |
!= | 判断左边跟右边是否不相等,如果成立就是true,如果不成立就是false |
> | 判断左边是否大于右边,如果成立就是true,如果不成立就是false |
>= | 判断左边是否大于等于右边,如果成立就是true,如果不成立就是false |
< | 判断左边是否小于右边,如果成立就是true,如果不成立就是false |
<= | 判断左边是否小于等于右边,如果成立就是true,如果不成立就是false |
注意事项:
- 关系运算符最终的结果一定是布尔类型的。要么是true,要么是false
- 在写==的时候,千万不要写成=
System.out.println(10 == 3); // false
【练习】相亲对象
-
题目
您和您的约会对象在餐厅里面正在约会。 键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他) 如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。 否则输出false。
-
代码
package ComparisonOperator; import java.util.Scanner; public class ComparisonTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 创建对象 System.out.println("请输入你的时髦度:"); int yuo = sc.nextInt(); // 接收对象 System.out.println("请输入你对象的时髦度:"); int her = sc.nextInt(); // 接收对象 boolean res = yuo > her; System.out.println("相亲情况:" + res); } }
逻辑运算符
分类
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与(且) | 并且,两边都为真,结果才是真 |
` | ` | 逻辑或 |
^ | 逻辑异或 | 相同为false,不同为true |
! | 逻辑非 | 取反 |
package LogicalOperator;
public class LogicalOperatorDemo1 {
public static void main(String[] args) {
// &
System.out.println(true & true); // true
System.out.println(false & false); // false
System.out.println(false & true); // false
System.out.println(true & false); // false
// |
System.out.println(true | true); // true
System.out.println(false | false); // false
System.out.println(false | true); // true
System.out.println(true | false); // true
// ^
System.out.println(true ^ true);//false
System.out.println(false ^ false);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true
// !
System.out.println(!true); // false
System.out.println(!false); // true
}
}
异或,Java提出了一个这样的运算符。C语言好像是没有的,python没有。
怎么说呢,民政局结婚,男生和男生不可能结婚,女生和女生也是,但是男生和女生可以结婚。
可以用来写注册。用户名和密码不能是一致。
这个实际用的很少。
短路逻辑运算符
分类
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 运算结果跟& 是一模一样的,只不过具有短路效果。 |
` | ` |
package LogicalOperator;
public class LogicalOperatorDemo1 {
public static void main(String[] args) {
// &&
System.out.println(true && true); // true
System.out.println(false && false); // false
System.out.println(false && true); // false
System.out.println(true && false); // false
// ||
System.out.println(true || true); // true
System.out.println(false || false); // false
System.out.println(false || true); // true
System.out.println(true || false); // true
}
}
注意事项:
&
、|
无论左边true false,右边都要执行。
&&
、‖
,如果左边能确定整个表达式的结果,右边不执行。
&&
:左边为false,右边不管是真是假,整个表达式的结果一定是false。
||
:左边为true,右边不管是真是假,整个表达式的结果一定是true。这两种情况下,右边不执行,提高了效率。
最常用的逻辑运算符:
&&
、||
、!
个人理解
短路运算符也是Java自己独有的、什么意思呢?
package LogicalOperator;
public class LogicalOperatorDemo1 {
public static void main(String[] args) {
// &
System.out.println(true & true); // true
System.out.println(false & false); // false
System.out.println(false & true); // false
System.out.println(true & false); // false
// &&
System.out.println(true && true); // true
System.out.println(false && false); // false
System.out.println(false && true); // false
System.out.println(true && false); // false
}
}
这样看来,逻辑运算符与短路运算符并没有区别,接着看例子
package LogicalOperator;
public class LogicalOperatorDemo2 {
public static void main(String[] args) {
int a = 10;
int b = 10;
boolean result = a++ < 5 && b++ < 5;
System.out.println(result); // false
System.out.println(a); // 11
System.out.println(b); // 10
}
}
还有一段
package LogicalOperator;
public class LogicalOperatorDemo2 {
public static void main(String[] args) {
int a = 10;
int b = 10;
boolean result = a++ < 5 & b++ < 5;
System.out.println(result); // false
System.out.println(a); // 11
System.out.println(b); // 11
}
}
先说&
和 &&
的作用是一致的,两边都为真,结果才是真
boolean result = a++ < 5 && b++ < 5;
已经得出a++ < 5
这是假的了,这个结果已经是false了、所以b++ < 5
不在执行了。可以看作是b++ < 5
这边短路了。
而boolean result = a++ < 5 & b++ < 5;
已经得出a++ < 5
这是假的了,这个结果已经是false了、但是我不放心,我还要在计算一遍b++ < 5
。
&
和 &&
可以理解为执行效率不一样。&&
执行快。
- 最常用的逻辑运算符:
&&
、||
、!
【练习】数字6
-
题目
数字6是一个真正伟大的数 , 键盘录入两个整数。 如果其中一个为6 最终结果输出true。 如果它们的和为6的倍数。最终结果输出true。 其他情况都是false。
-
代码实现
// 数字6.Java package LogicalOperator; import java.util.Scanner; public class LogicalOperatorTest1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 创建对象 System.out.println("请输入1个数字:"); int num1= sc.nextInt(); // 接收对象 System.out.println("请输入2个数字:"); int num2= sc.nextInt(); // 接收对象 boolean result; result = num1 == 6 || num2 == 6 || (num1 + num2) % 6 ==0; System.out.println(result); } }
三元运算符
-
作用
可以进行判断,根据判断内容得到不同的结果
-
格式
关系表达式? 表达式1: 表达式2;
-
计算规则
- 计算关系表达式的值。
- 如果关系表达式的值为真,那么执行表达式1。
- 如果关系表达式的值为假,那么执行表达式2。
-
注意点
三元运算符的最终结果一定要被使用,要么赋值给一个变量,要么直接打印出来。
package ThreeElementOperator;
public class ThreeElementOperatorDemo1 {
public static void main(String[] args) {
int a = 5;
int b = 10;
int max = a > b ? a: b;
System.out.println(max); // 10
System.out.println(a > b ? a: b); // 10
}
}
【练习】两只老虎
-
题目
动物园里有两只老虎,两只老虎的体重分别为通过键盘录入获得,
请用程序实现判断两只老虎的体重是否相同。
-
代码实现
package ThreeElementOperator; import java.util.Scanner; public class ThreeElementOperatorTest1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入第1只老虎体重"); int weight1 = sc.nextInt(); System.out.println("请输入第2只老虎体重"); int weight2 = sc.nextInt(); int max = weight1 > weight2 ? weight1: weight2; System.out.println(max); // 10 } }
【练习】求三个数的最大值
-
题目
一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm。
请用程序实现获取这三个和尚的最高身高。
-
代码实现
package ThreeElementOperator; public class ThreeElementOperatorTest2 { public static void main(String[] args) { int number1 = 50; int number2 = 75; int number3 = 100; int temp = number1 > number2 ? number1: number2; int max = number3 > temp ? number3: temp; System.out.println(max); // 100 } }
运算符的优先级
优先级 | 运算符 |
---|---|
1 | . 、() 、{} |
2 | ! 、 ~ 、++ 、-- |
3 | * 、/ 、% |
4 | + 、- |
5 | << 、>> 、>>> |
6 | < 、<= 、> 、>= 、instanceof |
7 | == 、!= |
8 | & |
9 | ^ |
10 | ` |
11 | && |
12 | ` |
13 | ?: |
14 | = 、+= 、-= 、*= 、/= 、%= 、&= |
有的运算符好像还没有学到欸
总结
这些内容好像是每个语言的标配,如果是计算机专业同学,自然而然这些也是常识了。但是也有那么几个不用的,
异或是什么?短路运算符是什么?然后Java的运算符优先级?
这些可能是需要重点看一下,学习一下,异或很少用,短路运算符可以当作逻辑运算符用,剩下的也没有什么了。
好了,我的学习笔记到此结束。
里面肯定有许许多多的bug,欢迎大家指出!毕竟这样成长更快。
也感谢大家可以看到这样,如果帮到了你,是我的荣幸。
谢谢大家!