目录
- 一、算术运算符
- 二、赋值运算符
- 三、关系运算符
- 四、逻辑运算符
- 五、Scanner类
- 六、三目运算符
- 七、字符串拼接符
- 八、位运算符
一、算术运算符
+(加):System.out.println(10+5); //15
-(减):System.out.println(10-5); //5
*(乘):System.out.println(10*5); //50
:/(除):System.out.println(10/5); //2
%(模):System.out.println(10%5); (取余数) //0
++(自增):在自身的基础上加1
(1)++a:先自增1,再使用;
int a = 10;
System.out.println(++a); //11
System.out.println(a); //11
(2)a++::先使用,再自增1.
int a= 10;
System.out.println(a++); //10
System.out.println(a); //11
--(自减):在自身的基础上减1
(1)--a:先自减1,再使用;
int a = 10;
System.out.println(--a); //9
System.out.println(a); //9
(2)a--:先使用,再自减1 .
int a 10;
System.out.println(a--); //10
System.out.println(a); //9
特殊点:
(1)两个byte类型做运算,会向上转型成int类型再做运算;;
(2)两个short类型做运算,会向上转型成int类型再做运算
(3)除了byte和short类型做运算时会向上转型成int外,其余的数值型都会按照取值范围大的类型先转型再做运算;
(4)浮点类型做运算符底层会对阶,可能导致失去精度;对于敏感信息(金额)不要使用浮点类型直接做运算;
(5)char类型可以做运算,先获取字符的ASCII,再做运算;
(6)++num1; 和 num2++; 没有区别,因为;表示执行语句的结束,不管先加还是后加都要加;
(7)++num的底层原理:
byte num = 10;
++num; //底层:num = (byte)(num+1);
System.out.println(num); //11
(8)num++的底层原理:(可以反编译看看)
int i = 0;
i = i++;
//底层分析:
//int temp = i; //temp记录了i的初始值 -- 0
//i = (int)(i+1);//i --> 1
//i = temp; //将temp中记录i的初始值(0)赋值给i
System.out.println(i); //0
二、赋值运算符
符号:=、+=、-=、*=、/=、%=
=:赋值号,将赋值号右边的值赋值给左边
+=、-=、*=、/=、%= 叫做复合运算
+=(加等于):
int num = 10;
num += 20; //num = (int)(num+20);
System.out.println(num); //30
-=(减等于):
int num = 10;
num -= 20; //num = (int)(num-20);
System.out.println(num); //-10
*=(乘等于):
int num = 10;
num *= 20; //num = (int)(num*20);
System.out.println(num); //200
/=(除等于):
int num = 20;
num =/ 10; //num = (int)(num/10);
System.out.println(num); //2
%=(模等于):
int num = 10;
num %= 3; //num = (int)(num%3);
System.out.println(num); //1
三、关系运算符
符号:==、!=、>、>= 、<、<=
注意:
(1)=为赋值号,==判断值是否相等;(字符串不能使用==,使用.equals(" "))
(2)!= 判断值是否不相等;
(3)! 不要写成中文的感叹号;
(4)关系运算符的结果都是boolean
System.out.println(10 == 10); //true
System.out.println(10 != 10); //false
System.out.println(10 > 20); //false
System.out.println(10 >= 20); //false
System.out.println(10 < 20); //true
System.out.println(10 <= 20); //true
boolean b1 = true;
boolean b2 = false;
boolean b3 = (b1 == b2); //==判断两个boolean是否相等
System.out.println(b3); //false
boolean b4 = (b1 = b2); //将b2赋值给b1,再将b1赋值给b4
System.out.println(b4); //false
四、逻辑运算符
&(与):前后两个条件都成立(true),结果才成立;
判断前者为false后,还会判断后者。
&&(短路与):前后两个条件都成立(true),结果才成立;
判断前者为false后,不会判断后者,效率更高。
|(或):前后两个条件有一个成立(true),结果就成立;
判断前者为true后,还会判断后者。
||(短路或):前后两个条件有一个成立(true),结果就成立;
判断前者为true后,不会判断后者的,效率更高。
^(异或):前后两个条件不一样就返回true;
!(非):置反
boolean bool = true;
System.out.println(!bool); //false
注意:
(1)逻辑运算符运行结果都是boolean类型;
(2)&、&&、|、||、^ 两侧都是boolean类型数据。
五、Scanner类
含义:Java给我们提供的Scanner类。
作用:可以在控制台中输入数据。
//导包:将Scanner类导入到当前类中(当前类可以使用Scanner类)
import java.util.Scanner;
public class Test11{
public static void main(String[] args){
//创建Scanner类的对象,这个对象叫做scan
Scanner scan = new Scanner(System.in);
System.out.println("输入int值:");
int num1 = scan.nextInt();
System.out.println("输入double值:");
double num2 =scan.nextDouble();
String str = scan.next();
char c = scan.next.charAt(0);
System.out.println(num1);
System.out.println(num2);
System.out.println(str);
System.out.println(c);
}
}
注意String类型和char类型。
六、三目(三元)运算符
1.语法结构:数据类型 变量名 = (表达式)?值1:值2;
2.表达式的结果必须是boolean的值
true - >将值1赋值给变量
false- >将值2赋值给变量
int num = (false)?10:20;
System.out.println(num); //20
七、字符串拼接符
+:如果两侧是数值,该符号为算数运算符;
如果有一侧是字符串,该符号为字符串拼接符.
System.out.println(1 + 2 + "abc" + "def" + 1 + 2);
// 3 + "abc" + "def" + 1 + 2
// "3abc" + "def" + 1 + 2
// "3abcdef" + 1 + 2
// "3abcdef1"+ 2
// "3abcdef12"
八、位运算符
1.概念:将十进制的数据转换为二进制再做运算。
2.符号:
&(与):同位比较,两者为1,结果则为1;
|(或):同位比较,两者有1,结果就为1;
^(异或):同位比较,两者不同为1,相同为0;
<<( 左移):整体向左移动n位,用n个0补位;
>> (右移):整体向右移动n位,就用n个最高位补位(正数最高位为0,负数最高位为1);
>>> (无符号位右移):整体向右移动n位,就用n个0补位。
注意:
(1)&、|、^ 符号两侧都是数值,此符号为位运算符;
(2)&、|、^ 符号两侧都是boolean值,此符号为逻辑运算符;
(3)>> 和 >>> 在移动正数时没有区别。
例:用最有效率的方式计算2*8.
//2 - 0000,0010
//<<3 - 0001,0000
System.out.println(2<<3); //16
总结
需求1:计算以下内容:
public class TestOpe05{
public static void main(String[] args){
int a = 5;
System.out.println(a++ + a++); //11
System.out.println(a++ + ++a); //16
System.out.println(++a + a++); //20
System.out.println(++a + ++a); //25
}
}
需求2:输入两个int值,返回最大值。
import java.util.Scanner;
public class Max{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
int max = (a>b)?a:b;
System.out.println(max);
}
}
需求3:输入三个int值,返回最大值。
import java.util.Scanner;
public class Max{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
System.out.println("请输入第二个数字:");
int c = scan.nextInt();
int max = (a>b)?a:b;
max = (max>c)?max:c;
System.out.println(max);
}
}
需求4:输入三个int值,从小到大输出。
import java.util.Scanner;
public class Max{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
System.out.println("请输入第二个数字:");
int c = scan.nextInt();
//最大值
int max = (a>b)?a:b;
max = (max>c)?max:c;
//最小值
int min = (a<b)?a:b;
min = (min<c)?min:c;
//中间值
int mid = a+b+c-max-min;
System.out.println(max"从小到大输出:"+min+" "+mid+" "+max);
}
}