前言
由于运算符,在笔试中常考,本人在此小结一下。正文
1.运算符分类(整数的除法是整除,java的字面量运算被java优化了)
数学、自增、逻辑 、比较和条件运算符。
2.数字运算符
1)封闭性(同种类型的运算得到同种类型)(采用补码)
1))同类型参与运算:例,int b=10+'A'; 等价于 int b=10+65;
2))返回同种类型(上溢出:丢失高位,例 byte b =(byte)128;下溢出:丢失低位,例 long——》float,损失了精度)
3))byte ,short,char 这三种类型在逻辑上存在,在物理上是使用int类型进行运算。
2) 整除
除法运算容易发生下溢出(在计算机数据表示中,当要表示的数据的绝对值小于计算机所能表示的最小绝对值的数的绝对值时,则产生下溢出),除以2相当于移位运算(右移位)
3)字面量优化
1))int a=10+11;//优化后为 int a=21;
2))报错示例:
byte a=10;
byte b=11;
byte f=a+b;//报错,a和b都被还原为int类型再运算,表达式结果为int型,需强制转换为byte类型
4)% 计算除法的余数
0除以其他数的余数为0;负数的余数为负数
3.自增运算符(++,--)
i++,后++,先将值作为表达式的值参与运算,然后再将i的值增加1
1)笔试题:
示例1:int a=11;
a=a++;//a为11. a++的表达式为11,后a的值加1,后a的值为12,将表达式的值赋值给a,打印a的值为11.
示例2:
int i =11;
i=i+++i+++i++;i的值为36;
a++的表达式为11,后a的值加1,
后a的值为12,第二个a++的表达式为12,
后a的值为13,第三个a++的表达式为13;将表达式的值赋值给a,打印a的值为36(11+12+13).
4.逻辑运算符 &&,||,&,|
1)短路运算符与普通运算符的区别:
短路运算符(条件1 && 条件2),如果条件1不成立,则表达式2不会被执行
2)面试题
int i=0;
boolean f =i++>0 && i++<1;//f为false,i=1;
5.比较运算符(>,<,==,>=,<=,!=)
1)比较运算符的操作数的变量类型的两种注意情况
基本类型的变量的值是基本类型
引用类型;类型的变量的值是对象的地址值
2)注:==
如果比较的是基本类型,是判断值是否相等
如果比较的是引用类型,是判断地址的值
3)例:
String str =new String(“abc”);
String str1="abc";
Syatem.out.println(str==str1);//false
String str2="abc";
Syatem.out.println(str2==str1);//TRUE,str1,与str2均为常量,存放在数据区,是相同的地址。
4)补充:
1)移位运算(在计算机中计算的效率最高的运算方式)
>>有符号,右移
<< 有符号,左移
>>>无符号的右移
2)面试题:
2*8最快算法: 2《《3;
3)位运算:
|:或 同零为零
&:与,同一为一
举例:&0XFF获取第八位,常用于I/O流的字符打印。
^:异或,相同为零,不同为1.
~:非
6.条件运算符
1)(三目运算符)
语法:条件表达式?表达式1:表达式2;
总结
自增、逻辑运算符重点。