一、算数运算符
1、算数运算符
1.算数运算符的使用符号:+、-、*、/、%、++、--
注意
++的区别:
a++; ——>先使用,在自增
++a; ——>先自增,在使用
--的区别:
b--; ——>先使用,在自减
--b; ——>先自减,在使用
2.算数运算符的深入
特殊点一:byte类型做运算会向上转型成int类型,再做运算注意:向上转型是按照最高位补位(符号位)
byteb1=10;
byteb2=20;
//b1 - byte:0000,1010
// int:0000,0000,0000,0000,0000,0000,0000,1010
//b2 - byte:0001,0100
// int:0000,0000,0000,0000,0000,0000,0001,0100
// 结果:0000,0000,0000,0000,0000,0000,0001,1110
// (byte):0001,1110
byteresult= (byte)(b1+b2);
System.out.println(result);
特殊点二:short类型做运算会向上转型成int类型,再做运算
注意:两个变量做运算时需要强制类型转换,例如:
short a = 10;
short b=10;
short result = (short)(a + b);
特殊点三:除了byte和short做运算会向上转型成int,其余的数值型按照取值范围大的类型转型
特殊点四:浮点类型做运算有可能会损失精度,所以浮点类型不能直接做运算
特殊点五:char类型做运算是获取的字符里的码值
特殊点六:a++; 和 ++a;没有区别,因为分号是执行语句的结束,不管先加还是后加,都给我加
inta=10;
//a++;
++a;
System.out.println(a++);//两种输出均为11
特殊点七:int a = 10;
++a;//a = (int)(a+1);//相当于对a变量先加1,然后再将值赋给a
System.out.println(a);
2、经典面试题:
经典面试题一:输出结果为?
inta=8;
intb= (a++)+(++a)+(a*10);//(一步一步进行运算)
//1)a++: 此时a=8,使用后a=9
//2)++a:中先加1,a=10,进行使用
//3)a*10:此时a=10,相乘结果为100
//4)全部相加为:8+10+10*10=118
System.out.println(b);//118
经典面试题二:输出结果为?
inti=0;
i=++i; //(先加1,在赋值)
//底层逻辑:
//i = (int)(i+1);
//i = i;
System.out.println(i);//1
经典面试题三:输出结果为?
inti=0;
i=i++;
//底层逻辑:
//int temp = i;//temp记录了i的初始值 -- 0
//i = (int)(i+1);
//i = temp;
System.out.println(i);//0
二、赋值运算符
1、赋值运算符的使用
符号:=、+=、-=、*=、/=、%=
2、经典面试题
经典面试题一:输出结果为?
inta,b;//一次性声明多个变量
a=b=100;//将100赋值给变量b,再将b赋值给a
System.out.println(a);//100
System.out.println(b);//100
经典面试题二:下面的两种写法结果分别是?
shorts=1;
s=s+1; //报错:short和int做运算会向上转型成int类型
shorts=1;
s+=1;//底层:s = (short)(s+1);
赋值规则: s += 1 s = (T)((s) + (1))复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型。
三、关系运算符
1、关系运算符的使用
符号:==、!=、>、>=、<、<=
注意:1.=是赋值号,将右边的值赋值给左边的变量 2.==是判断两个值是否相同 3.关系运算符运算的结果都是boolean类型
2、经典面试题
经典面试题一:输出结果为?
intx=10;
inty=10;
booleanflag= (x==y);
System.out.println(flag);//true
flag= (x=y);//会报错 -- boolean不能与其他类型兼容
System.out.println(flag);
经典面试题二:输出结果为?
booleanb1=true;
booleanb2=false;
booleanb3= (b1==b2);
System.out.println(b3);//false
booleanb4= (b1=b2);
System.out.println(b4);//false
四、Scanner类的运用
1、Scanner的含义
含义:java提供的专门在控制台输入数据的类
1)先导入包:import java.util.Scanner
2)创建Scanner的对象:
Scanner scan(可以改变)= new Scanner(System.out.println);
3)利用Scanner类的对象从控制台输入数据
类型 类名=scan.next类型()(类名首字母大写)
特殊:String类型
String 类名= scan.next();
五、字符串拼接符
1、基本运用
字符串拼接符:+
注意点:
1)+两侧都是数字,此符号为算数运算符2)+有一侧是字符串,此符号为字符串拼接符3)+两侧都是字符串,此符号为字符串拼接符
六、逻辑运算符
1、逻辑运算符的使用
1.符号:
&与 &&短路与 |或 ||短路或
^异或 !非
2.注意事项
1)&与:两侧必须是boolean类型,两者必须同时成立(true),结果才成立(true)
System.out.println(true&true);//true
System.out.println(false&true);//false
System.out.println(true&false);//false
System.out.println(false&false);//false
2)&&短路与:两侧必须是boolean类型,两者必须同时成立(true),结果才成立(true)
注意点:
(1)&与:判断前者为false后,还会判断后者
(2)&&短路与:判断前者为false之后,就不会判断后者,效率高
(3)cmd中出现ArithmeticException--算数异常
3)|或:两侧必须是boolean类型,两者有一侧成立(true),结果就成立(true)
System.out.println(true|true);//true
System.out.println(false|true);//true
System.out.println(true|false);//true
System.out.println(false|false);//false
4)||断路或:两侧必须是boolean类型,两者有一侧成立(true),结果就成立(true)
注意点:
(1)|或:判断前者为true后,还会判断后者
(2)||短路或:判断前者为true之后,就不会判断后者,效率高
5)^异或:两侧必须是boolean,两者不同,结果就成立(true)
System.out.println(true^true);//false
System.out.println(false^true);//true
System.out.println(true^false);//true
System.out.println(false^false);//false
6)!非:置反
七、三目运算符
1、关系表达式
1.5 + 6 --> 算数表达式 5 > 6 --> 关系表达式
2、三目运算符
1.语法结构:变量 = (表达式)?值1:值2;
2.理解:
1)表达式的结果必须是boolean2)true - 将值1赋值给变量3)false- 将值2赋值给变量
3、面试扩展题
1.三目运算符返回值规则:
(1)值1和值2都是常量,按照取值范围大的类型返回数据
inta=5;
System.out.println((a<5)?10.9:9);//9.0
(2)值1和值2都是变量,按照取值范围大的类型返回数据
charx='x';//Unicode -- 120
inti=10;
System.out.println(false?i:x);//120
(3)值1和值2一个是变量一个是常量的情况,判断常量是否在变量所属类型的取值范围内 在 -- 按照变量类型返回数据 不在- 按照常量类型返回数据
charx='x';//Unicode -- 120
System.out.println(false?100:x);//x
System.out.println(false?100000:x);//120(超出了取值范围)
八、位运算符
1、位运算符
含义:将十进制数据转换为二进制做运算
符号: &与 |或 ^异或 << 左移
右移>>
无符号位右移>>>
2、使用方法
(1)&与:同位比较,两者都为1,结果才为1
(2)|或:同位比较,两者有1,结果就为1
(3)^异或:同位比较,相同为0,不同为1
&、|、^:前后两侧都是boolean,此符号为逻辑运算符 &、|、^:前后两侧都是数值,此符号为位运算符
(4)<<左移:整体向左移动n为,就用n个0补到最低位
(5)>>右移:整体向右移动n为,就用n个符号位补到最高位
(6)>>>无符号位右移:整体向右移动n为,就用n个0补到最高位
注意:右移和无符号位右移在处理正数时是一样的
3、运算符的优先级
经验:不用记,灵活运用小括号