运算符:
分类:
算术运算符
赋值运算符
比较(关系)运算符
*逻辑运算符
*位运算符
三元(三目)运算符
算术运算符:
基本算术运算符:
+,-,*,/,%
扩展的算术运算符:
++,--
/用法:两个数相除,默认取整
%用法:两个数进行取模,求余数
eg;
class OperatorDemo{
public static void main(String[] args){
int a = 3 ;
int b = 4 ;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
//System.out.println(a/b);此输出结果为:0
System.out.println(a*1.0/b);
System.out.println(a%b);
}
得到输出结果:
7
-1
12
0.75
3
eg:
计算数值
class Demo{
public static void main(String[] args){
int a = 10;
int b = 10;
int c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("c:"+c);
}
}
计算过程:
a=10, b=11 c=10
a=9 , b=11,c=9
a=10,b=10,c=9
a=9, b=10,c=8
赋值运算符
基本的赋值运算符:
= 含义:
将=号右边的数据赋值给左边的某个类型的变量
扩展的赋值运算符:
+= -= *= /= %=
+=用法:
将=号右边的值和左边的变量值相加,然后在将结果赋值给左边的变量a
eg:
class Demo{
public static void main(String[] args){
int a =10;
int x , y ;
x = y = 20;
System.out.println("x:"+x+",y:"+y);
boolean flag = ( a == y );
System.out.println(flag);
int m =20 ;
m += a ;
System.out.prontln("m:"+m);
}
}
运算结果:
x=20
y=20
false
m=30
比较运算符
>,>=,<=,<,!=,==
注意事项:
无论当前比较运算符连接的是简单的数据
还是复杂的表达式
最终结果都是boolean类型
eg:
class Demo{
int x = 10 ;
int y = 20 ;
int z = 30 ;
System.out.println(x > y) ;
System.out.println((x+y) >= (x+z)) ;
System.out.println(x >= y) ;
System.out.println(x < y) ;
System.out.println(x <= z) ;
System.out.println(x != y) ;
System.out.println(x == y) ;
运算结果:
false
false
false
ture
ture
ture
false
逻辑与算符(注意运算符区别)
逻辑运算符
基本的逻辑运算符:
逻辑与&:有false,则false
逻辑或|:有true,则true
逻辑异或^:相同则为false,不同则为true
逻辑非!:非false,则true;非true则false(偶数个逻辑非是他本身)
扩展的逻辑运算符:
逻辑双与&&
逻辑双或||
逻辑双与&& 和逻辑单与&的区别?
&&和&都符合,有false,则false;
如果&&符号的左边表达式位false,右边就不执行, (短路效果)
逻辑||同理,左边的表达式为true,右边不执行
例:
class OperatorDemo2{
public static void main(String[] args){
int a = 1 ;
int b = 2 ;
int c = 3 ;
System.out.println((a>b) && (a>c));//false 短路,不执行右边
System.out.println((a>b) && (a<c));//false 短路,不执行右边
System.out.println((a<b) && (a>c));//false
System.out.println((a<b) && (a<c));//true
System.out.println("-------------------") ;
int x = 3 ;
int y = 4 ;
//boolean flag = ((x++)==3 & (y++)==4) ;
//boolean flag = ((x++)==3 && (y--)==4) ;
boolean flag = ((++x)==3 && (y--)==4) ;
System.out.println("x:"+x);//4 //4 //4
System.out.println("y:"+y);//5 //3 //4
System.out.println("flag:"+flag);//false
}
}
位移运算符(用数据二进制进行运算)
位与&:有0则0
位或|:有1则1
位异或^:相同为0,不同为1
特点:一个数据位异或另一个数据两次,其值是他本身!应用场景:简单的数据加密
高级加密: md5
安全框架(Spring security)
~ 反码:逐位取反,然后还需要通过得到补码---->原码
<<:左移:
左移动,最高位丢掉.右边补0
>>:右移:
最高位如果是1,左边补1;最高位是0,左边补0
>>>:无符号右移:;
最高位无论是0或1,都补0
eg:
面试题:
有效的方式写出2乘以8的结果
2 << 3
class OperatorDemo3{
public static void main(String[] args){
//<<
//结论:将当前<<符号的左边的数据乘以2的移动次幂
System.out.println(3 << 2);//3*2^2 = 12
//>>
//结论:将当前>>左边的数据除以2的移动次幂
System.out.println(24 >> 3);//24/2^3 = 3
System.out.println(24 >> 2) ;//24/2^2= 6
System.out.println(-24 >> 2) ;//通过补码计算=-6
//>>>
System.out.println(-24 >>> 2) ;//1073741818
}
}
面试题2:
将两个数据的值进行互换(考察点:位运算符中位异或特点)
class Demo{
public static void main(String[] args){
int a = 10 ;
int b = 20 ;
System.out.println("a:"+a);
System.out.println("b:"+b);
//1:借助中间变量
int temp = a ;
a = b ;
b = temp ;
System.out.println("a:"+a);
System.out.println("b:"+b);
//方式2:位异或的特点
a = a ^ b ;
b = a ^ b ;//b = a ^ b ^ b ; = a
a = a ^ b ;//a = a ^ b ^ a ; = b
System.out.println("a:"+a);
System.out.println("b:"+b);
//方式3:算数加减
a = a + b ; //a = 3 0;
b = a - b ;//b = 30 - 20 ;
a = a - b ;//a = 30 -10 ;
System.out.println("a:"+a);
System.out.println("b:"+b);
b = (a+b) - (a=b) ;
System.out.println("a:"+a);
System.out.println("b:"+b);
}
}
三目运算符(开发中常用)
格式:
(表达式?)执行true的结果:执行false的结果;
执行流程:
1)先判断表达式是否成立
2)如果成立,执行true的结果
3)不成立,执行false的结果
eg:
获取三个整数中的最大值
class OperatorTest{
public static void main(String[] args){
int x = 10 ;
int y = 30 ;
int z = 20 ;
//方式1:使用中间变量的方式(三元)
//定义变量temp
int temp = ((x > y)? x : y);
//使用temp和z进行比较
int max2 = (( temp > z) ? temp : z) ;
System.out.println("三个数据中的最大值是:"+max2);
//方式2:三元
int max3 = (x > y)? ((x > z) ? x : z) :((y > z) ? y:z) ;
//不推荐:三元运算符使用时需注意括号的使用
//int max3 = x > y? x > z ? x : z :y > z ? y:z ;
System.out.println("max3的值是:"+max3) ;
}
}
键盘录入数据(难点 )
Scanner :文本扫描器
jdk提供的一个类
使用是键盘录入数据的基本开发步骤:
1)导包 import java.util.Sacnner;
位置在class的上面
2)创建键盘录入对象
Sacnner sc = new Scanner(System.in);
3)接收数据
目前固定使用
int result = sc.nextInt();
4)输出结果result(自定义变量名)
eg:
获取两个数据的最大值
import java.util.Scanner;
class ZDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数据:");
int one = sc.nextInt();
System.out.println("请输入第二个数据:");
int two = sc.nextInt();
int max = (one>two)?one:two;
System.out.println("两个数据之中较大的:"+max);
}
}