Java常见的运算符

  • 算数运算符
  • 赋值运算符
  • 一元运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 位移运算符
  • 三元运算符

算术运算符

+(加) ,-(减),*(乘),/(除),%(求余)

算术运算规则

两个数字做 算术运算的时候,满足以下规则

如果两个数中有 double 类型,结果一定是double类型
如果两个数中有float类型,结果一定是float类型
如果两个数中有long类型,结果一定是long类型

赋值运算符

=(赋值) += , -= , *= , /=, %=

赋值运算符(除=) 不会提升变量的数据类型

一元运算符

a++     a--
++a     --a

a++ 或者 ++a 都可以即作为 语句,也可以作为表达式来使用

a++ : 先计算 a++ 表达式的值,表达式的值等于a的值, 再对a自增1
++a : 先对 a 自增1, 在计算 ++a 表达式的值, 表达式的值等于a的值

int a = 5 ; 

int b = (a--) + (--a) + (a--) ;

关系运算符

> , >= , < , <=  , == , !=

关系运算符是一个表达式、返回的结果是 boolean 类型
关系运算符常用来做条件判断
6 > a > 3 (语法错误的), a > 3, a < 6

逻辑运算符

&& (逻辑与) ,  || (逻辑或) ,  !(逻辑非) 

& (逻辑与) ,   | (逻辑或)

逻辑运算符是一个表达式、返回的结果是 boolean 类型
逻辑运算符常用来做条件判断
a > 3 && a < 6 (正确写法)

&&|| 会产生短路现象, &| 不会产生短路

&& :一假即假, 当第一个表达式为假的时候,那么第二个表达式不参与运算
|| : 一真即真, 当第一个表达式为真的时候,那么第二个表达式不参与运算
通常推荐使用 &&||

位运算符

位运算只能应用于整数类型
主要是通过二进制进行运算的
位运算的运算速度是最高效的

& (位与) ,| (位或) , ~(位非) ,^ (异或)

在位运算中,我们可以简单的把1就理解为true,0理解为 假
& :相同位 如果有0,结果为0,否则为1
| :相同位 如果有1,结果为1,否则为0
~ :按位取反,原来是1 变为0,原来是0变为1
^ : 相同位 不同结果为1,否则为0;

public class Test3{
	public static void main(String[] args){
		int key=2022;//密钥
		String keystr="";//接收加密后拼接的字符串
		String s="每天都要快乐";
		for(int i=0;i<s.length();i++){
			char z=s.charAt(i); //获取每个字符
			char f=(char)(z^key);//每个字符与key异或 加密
			keystr +=f;
		}
		System.out.println(keystr);
		String oldstr="";
		for(int i=0;i<keystr.length();i++){
			char z=keystr.charAt(i);
			char f=(char)(z^key);
			oldstr +=f;
		}
		System.out.println(oldstr);
	}
}

位移运算符

位移运算只能应用于整数类型
主要是通过二进制进行运算的
位移运算的运算速度是最高效的

<<(左移) ,  >>(右移), >>>(无符号右移)
5
0000 0000 0000 0000 0000 0000 0000 0101
-4
1111 1111 1111 1111 1111 1111 1111 1100

左移:一个数的二进制向左边移动指定位数,在低位补0
右移: 一个数的二进制向右边移动指定位数,在高位正数补0,负数补1
无符号右移:一个数的二进制向右移动指定位数,在高位补0

三元运算符

是一个表达式 , 不能单独使用
语法:exp ? exp1 : exp2 exp表达式 必须是一个 返回 boolean的表达式
当exp表达式为true