运算符
算数运算符
1、算数运算符的种类: + - * / %
2、+运算符的两个作用:加法运算符和连接符(让任何的数据都可以与字符串进行拼接)
连接符注意点:任何类型的数据与字符串使用连接符连接,那么结果都是字符串类型的数据。
3、/的结果的类型与大数据类型一致。
4、%的结果符号,取决于被除数的符号。
自增自减运算符
1、种类:++(自增)和 --(自减)。
2、形式:++或者--在前:先自增后使用。
++或者--在后:先使用后自增。
3、后自增在jvm的运行原理:因为后自增要使用 到没有+1之前 的值,那么jvm会先声明一个变量用于保存没有+1之前的值。
如:int j = 1;
j = j--;
最后j的值位1。计算过程如下:
int temp = j;
j = j+1;
j = temp;
赋值运算符
1、种类:= += -= /= %=
2、赋值运算符会进行自动类型转换,如:
byte b1 = 1;
byte b2 = 2;
//b2 = (byte)(b1 + b2); 如果不进行类型转换在编译时回报类型不兼容的错误;因为byte short char 在进行运算的时候会自动转化为int类型。
b2 +=b1;//此处在编译的时候不会报类型不兼容的错误。
注意:b2+=b1 在编译的时候,java编译器会进行强制类型转换,不需要我们手动转换了。
比较运算符
1、比较运算符: 比较运算符的结果都是返回一个布尔值的。
2、种类: == != > < >= <=
3、注意点:
(1)==用于比较两个基本数据类型数据的时候,比较的是两个变量所存储的值是否一致。
(2)==用于比较两个引用类型变量的数据时候,比较的是两个 引用类型变量所记录的内存地址是否一致。
(3)两个不同的数据类型可以进行比较,但是必须兼容。
逻辑运算符
1、逻辑运算符 :逻辑运算符的作用是用于连接布尔表达式的。
2、种类:
1、& (与,并且) 规律: 只有左右变量同时 为true,那么结果才是true,否则就为false。
2、| (或,或者) 只要两边的布尔表达式有一边为true,那么结果就为true,只有两边同时为false 的时候,结果才是false.
3、^ (异或) 规律: 只要两边的布尔表达式 结果不一致,那么结果就为true,如果左右两边 的布尔表达式一致,那么就为false.
4、! (非) 规律:真假颠倒。
5、&& (短路与/双与)。
6、|| (短路或/双或)。
3、短路与和单与符号的相同与不同点:
相同点: 短路与和单与运算 的结果是一样的。
不同点: 使用短路与的时候,如果左边的布尔表达式为false,则不会在运算右边的布尔表达式,从而提高了效率。使用单与的时候,即使发现左边的布尔表达式为false,还是 会运算右边的布尔表达式的。
位运算符
1、位运算符常用来对二进制数据进行运算。
2、种类:&(与) |(或) ^(异或) ~(取反) <<(左移) >>(右移) >>>(无符号左移) 。
3、如果操作数A连续异或同一个操作数两次,那么结果还是操作数A,常用来加密使用。
位运算常见面试题:1、交换两个变量的值,不准出现第三方变量。
int a = 3;
int b = 5;
a = a^b;
b = a^b;
a = a^b;
位运算常见面试题:2、取出一个二进制数据的指定位数。要求读取该二进制数据的低4位。
0000000-00000000-00010100-01001101
& 00000000-00000000-00000000-00001111
------------------------------------------
0000000-00000000-00000000-00001101
4、左移规律:(二进制位数向左移动,右面补0)一个操作数进行左移运算的时候,结果就是等于操作数乘以2的n次方,n就是左移的位数.)
5、右移规律:(整数右移,左面补0;负数右移,左面补1)一个操作数在做右移运算的时候,实际上就是等于该操作数除以2的n次方,n就是右移的位数。
6、无符号右移与右移的区别:进行右移运算的时候,如果操作数是一个正数,那么左边的空缺位使用0补,如果操作数是一个负数,那么左边的空缺位使用1补。而使用无符号右移的时候,不管是正数还是负数都统一使用0补。
笔试题目:使用最高的效率算出2乘以8的结果。---> 2<<3
三目运算符
1、格式: 布尔表达式?值1:值2
2、三元运算符要注意的细节:使用三元运算符的时候,一定要使用该表达式返回的结果,或者是定义一个变量接收该表达式返回的结果。否则会报编译错误。
运算符的结合性和优先级