算术运算符
+
功能:
-
连接符操作
代码展示:
public class OperationDemo03 { public static void main(String[] agrs){ System.out.println("多看看我的" + "博文" + ",谢谢"); // 多看我的博文,谢谢 } }
运行截图:
-
表示正数
代码展示:
public class OperationDemo04 { public static void main(String[] agrs){ System.out.println( + 1024); // 1024 } }
运行截图:
-
加法运算
代码展示:
public class OperationDemo05 { public static void main(String[] agrs){ int sum = 3 + 4; System.out.println(sum); // 7 } }
运行截图:
-
功能:
-
减法运算
代码展示:
public class OperationDemo06 { public static void main(String[] agrs){ int diff = 10 - 6 ; System.out.println(diff);// 4 } }
运行截图:
-
表示负数
代码展示:
public class OperationDemo07 { public static void main(String[] agrs) { System.out.println(-4);// -4 } }
运行截图:
*
功能 :实现乘法运算
代码展示:
public class OperationDemo08 {
public static void main(String[] args){
int multiply = 10 * 3;
System.out.println(multiply); // 30
}
}
运行截图:
/
功能:实现除法功能
public class OperationDemo09 {
public static void main(String[] agrs) {
int devide = 3 / 4;
System.out.println(devide); // 0
}
}
运行截图:
%
功能:实现取模|取余运算
代码展示:
public class OperationDemo010 {
public static void main(String[] agrs){
int residue = 10 % 3;
System.out.println(residue);// 1
}
}
运行截图:
注意:
-
除法
/
得到的商,取模%
得到的余数代码展示:
public class OperationDemo { public static void main(String[] agrs) { // 除法 / 得到的商 int divide = 3 / 5; System.out.println(divide);// 是0 而不是0.5 // 取模 % 得到的 int delivery = 3 % 5; System.out.println(delivery); // 是3 而不是 0 } }
运行截图:
-
两个整数相除得到的还是一个整数,若想得到小数必须有浮点数的参与
代码展示:
public class OperationDemo01 { public static void main(String[] agrs) { // 没有浮点数参与 int num = 1 / 2; System.out.println(num); // 是 0 ,而不是 0.5 // 有浮点数参与 float num1 = 1.0f / 2; System.out.println(num1); // 是 0.5 ,而不是 0 } }
运行截图:
-
0 % 任何数 的 结果 还是0
代码展示:
public class OperationDemo02 { public static void main(String[] args) { int i = 0 % 3; int x = 0 % 5; System.out.println(i); // 0 System.out.println(x); // 0 } }
运行截图:
字符的“+”操作
'a' = 97
'A' = 65
'0'= 48
字符在计算机内存中存储的都是具体的数值。
public class OperationDemo012 {
public static void main(String[] args){
// 若两个操作数中有一个为float类型,则另一个会隐式类型转换为float类型,返回结果的类型也是float类型
float sum = 'a' * 1.0f;
System.out.println(sum); // 97.0
// 若两个操作数中有一个为double类型,则另一个会隐式类型转换为double类型,返回结果的类型也是double类型
double sum1 = 'a' * 1.0;
System.out.println(sum1); // 97.0
// 若两个操作数中有一个为long类型,则另一个会隐式类型转换为long类型,返回结果的类型也是long类型
long sum2 = 'a' + 10000000000L;
System.out.println(sum2); // 10000000097
// 若两个操作数中既没有float类型,也没有double类型和long类型,那返回的结果就是int类型
int sum3 = 'a' + 10;
System.out.println(sum3); // 107
}
}
运行截图:
提升规则:
前提 :两个不同类型的操作数,进行运算时就会触发隐式类型转换。
- 若两个操作数中有一个为float类型,则另一个会隐式类型转换为float类型,返回结果的类型也是float类型
- 若两个操作数中有一个为double类型,则另一个会隐式类型转换为double类型,返回结果的类型也是double类型
- 若两个操作数中有一个为long类型,则另一个会隐式类型转换为long类型,返回结果的类型也是long类型
- 若两个操作数中既没有float类型、也没有double类型和long类型,则最后返回的结果就是int类型
注意:
- 注意区分 字符 ‘0’ 和 数字 0
代码展示:public class OperatorDemo { public static void main(String[] args) { System.out.println(0 + 'a'); // 97 } }
字符串的"+"操作(常见
)
说明:当字符串 与 其他数据类型做“+”操作时,实质上做的是连接符操作
代码展示:
public class OperationDemo011 {
public static void main(String[] args) {
System.out.println("CSDN" + 666);
System.out.println(1 + 99 + "年CSDN");
System.out.println("CSDN" + (65 + 1));
}
}
运行截图:
赋值运算符(=
)
将等号右边的表达式的结果赋值给等号左边的变量|final修饰的自定义常量
代码展示:
public class OperationDemo013 {
public static void main(String[] args) {
final int num = 12;
int num1 = 45;
System.out.println(num1); // 45
num1 = 46;
final int num2 = 3 + 4;
int num3 = 6 + 7;
System.out.println(num); // 12
System.out.println(num1); // 46
System.out.println(num2); // 7
System.out.println(num3); // 13
}
}
运行截图:
扩展赋值运算符
+= 、 -= 、*=、/=、%=
代码展示:
public class OperationDemo014 {
public static void main(String[] args) {
// +=
short num = 12 + 13; // 25
// 扩展运算符 +=
num += 10 + 1.0; // 等价于 num =(short) (num + 10);
System.out.println(num); // 36
// *=
int num1 = 10;
num1 *= 10 * '0';
System.out.println(num1); // 4800
// /=
int num2 = 20;
num2 /= 5 - 1;
System.out.println(num2); // 5
// -=
int num3 = 30;
num3 -= 10;
System.out.println(num3); // 20
// %=
int num4 = 89;
num4 %= 8;
System.out.println(num4); // 1
}
}
运行截图:
注意:
- 扩展赋值运算符隐含了强制类型转换
问:以下代码会出现编译错误嘛? 并给出正确的代码
错误的代码:
public class OperationDemo015 {
public static void main(String[] agrs) {
short i = 20;
i = i + 10;
System.out.println(i);
}
}
编译错误截图:
错误原因:“10” 是整数固定值常量,整数固定值常量的默认值为int类型,i为short类型, i + 10返回结果的类型是int类型而不是short类型,若两个操作数中既没有double类型、也没有float类型和long类型,那返回的结果就是int类型。故产生编译错误。
正确的代码展示:
public class OperationDemo015 {
public static void main(String[] agrs) {
/* 方式一:
int i = 20;
i = i + 20;
System.out.println(i);
*/
/*方式二
short i = 20;
i += 20;
System.out.println(i);
*/
// 方式三
short i = 20;
i = (short)(i + 20);
System.out.println(i); // 40
}
}
运行截图:
自增自减运算符(++、--
)
++num
、num++
、num--
、--num
单独使用时没有任何区别
public class OperationDemo016 {
public static void main(String[] args) {
int num = 0;
num ++;
System.out.println(num); // 1
++ num;
System.out.println(num); // 2
int num1 = 9;
num1 --;
System.out.println(num1); // 8
-- num1;
System.out.println(num1); // 7
}
}
运行截图:
num++、++num 、--num、num--
自增自减运算符和别的操作数一起参与运算时才有区别
num ++
特点:先运算后自增
++ num
特点:先自增后运算
-- num
特点: 先自减后运算
num --
特点:先运算后自减
代码展示:
public class OperationDemo017 {
public static void main(String[] args) {
int num = 12;
num = num ++ + 12;
System.out.println(num); // 24
int num1 = 14;
num1 = ++ num1 + 10;
System.out.println(num1);// 25
int num2 = 15;
num2 = -- num2 * 12;
System.out.println(num2); // 168
int num3 = 46;
num3 = num3 -- + 12; // 58
System.out.println(num3);
int num4 = 0;
System.out.println(-- num4); // -1
System.out.println(num4 --); // -1
System.out.println(num4 ++);// -2
System.out.println(++ num4);// 0
}
}
运行截图:
注意:
- 固定值常量& final修饰的自定义常量不能做自增自减运算,只有整型变量才可以,因为常量只能被赋值一次。
- 自增自减运算符单独使用的场合是最多的
关系(条件)运算符
<、<=、>=、>、!=、==
public class OperationDemo018 {
public static void main(String[] agrs) {
int a = 10, b = 20;
boolean flag = a == b;
System.out.println(flag); // false
System.out.println(a >= b); // fasle
boolean flag1 = a != b;
System.out.println(flag1); // true
System.out.println(a <= b); // true
boolean flag2 = a > b;
System.out.println(flag2); // false
System.out.println(a < b); // true
}
}
运行截图:
注意:
- 关系运算符返回结果类型必须是boolean类型
- 一个”=“表示的是赋值运算符,”==“表示的关系运算符
>=
:大于或者等于 ,<=
:小于或者等于,不是并且关系 ,而是或者关系,满足一个即可
逻辑运算符
最常用的逻辑运算符 : || 、 && 、!
符号 | 含义 | 结论 |
---|---|---|
| | 逻辑或 | 有true则true |
! | 逻辑非 | 取反 true即false,false即true |
^ | 逻辑异或 | 相同为false,不同为true |
|| | 短路或 | 有true则true |
&& | 短路与 | 有false则false |
& | 逻辑与 | 有false则false |
代码展示:
public class OperationDemo20 {
public static void main(String[] agrs) {
// ! 逻辑取反 true即false false即true
boolean flag = !true;
System.out.println(flag); // false
System.out.println(!!true); // true
// ^ 逻辑异或 相同为false,不同为true
boolean flag1 = true ^ false;
System.out.println(flag1); // true
boolean flag2 = true ^ true;
System.out.println(flag2);// false
boolean flag3 = false ^ false ;
System.out.println(flag3); // false
boolean flag4 = false ^ true;
System.out.println(flag4); // true
// | 逻辑或 有true则true
System.out.println( 3 > 5 | 5 < 3); // false | false false
System.out.println(7 < 8 | 4 > 5); // true | fasle true
System.out.println(8 == 9 | 7 != 8);// false | true true
System.out.println(3 == 3 | 4 == 4);// true | true true
// || 短路或 有true则true
System.out.println(3.0f == 3.1 || 4.0 == 5.0f); // false || fasle false
System.out.println(30 >= 40 || 75 <= 'a'); // false || true true
System.out.println(30 >= 20 || 45 <= 'A'); // true || true true
System.out.println(30 != 78 || 30 != 30);// true || false true
// & 逻辑与 有false则false
int a = 12;
int b = 13;
boolean flag5 = true;
System.out.println((a ++) > 10 & (b ++) > 20); // true & false false
System.out.println("a = " + a + "\t b = " + b); // a = 13 b = 14
System.out.println((++a) == a & (++ b) == b); // true & true true
System.out.println("a = " + a + "\t b = " + b); // a = 14 b = 15
System.out.println((a --) > 100 & flag5);// false & true false
System.out.println("a = " + a + "\t b = " + b); // a = 13 b = 15
System.out.println((-- a) > 100 & (b --) > 100); // false & false false
System.out.println("a = " + a + "\t b = " + b); // a = 12 b = 14
// 短路与 && 有false 则false
System.out.println((3+4) == 7 && (7 % 10) == 20); // true && false false
System.out.println((3 * 10) == 30 && (12 + 12) == 24); // true && true true
System.out.println( 3 == 4 && 5 != 6); // false && true false
System.out.println("admin".equals("admin1") || "123456".equals("1234567")); // false && false false
}
}
运行截图:
&&、& 和 || 、| 的相同点和不同点:
相同点:&& 和 & 的结论都相同,||和 | 的结论都相同
不同点:&& 和 || 有短路效果,并且效率高。
左表达式 && 右表达式 :
-
当左表达式 为
true
时,则右表达式一定会执行,并返回右表达式的结果 -
当左表达式为false时,则右表达式不会执行,并直接返回左表达式的结果
左表达式 & 右表达式 :
- 当左表达式 为
true
时,则右表达式一定会执行,并返回右表达式的结果 - 当左表达式为false时,则右表达式依旧会执行,并直接返回左表达式的结果
左表达式 | 右表达式 :
- 当左表达式 为
true
时,则右表达式依旧会执行,并直接返回左表达式的结果 - 当左表达式为false时,则右表达式一定会执行,并返回右表达式的结果
左表达式 | | 右表达式 :
- 当左表达式 为
true
时,则右表达式不会执行,并直接返回左表达式的结果 - 当左表达式为false时,则右表达式一定会执行,并返回右表达式的结果
三目运算符(三元运算符)
格式:boolean类型的表达式 ? 表达式1 :表达式2;
代码展示:
public class OperationDemo019 {
public static void main(String[] args) {
int temp = 3 > 5 ? 3 : 5;
boolean temp1 = true == false ? true : false;
float temp2 = 3.0f > 5.0f ? 3.0f : 5.0f;
char temp3 = 'a' > 'b' ? 'a' : 'b';
System.out.println(temp);// 5
System.out.println(temp1);// false
System.out.println(temp2);// 5.0
System.out.println(temp3); // b
System.out.println(127 > -128 ? 127 : - 128); //127
System.out.println(5.0 > 98.0 ? 5.0 : 98.0); // 98.0
}
}
运行截图:
注意:
- 三目运算符,一定会返回一个值,要么用一个变量来接收,要么打印出来