Java运算符--一篇文章让你彻底学会Java运算符【带记忆口诀】

一篇文章让你彻底学会Java运算符

  首先,Java常用的运算符分为算术运算符、赋值运算符、关系运算符、逻辑运算符、 位运算符以及三元运算符。

一、算数运算符

在这里插入图片描述
+、-、*、/我就不多说了,只有/在Java中是做整除,其他和数学里面一样,例如下面的5/2的结果是2,叫做一刀切。

System.out.println(5/2);

%这个符号叫做模,也叫做取余,说直白点7%3就是7除3的余数是几。【不知道余数的请点击】

System.out.println(7%3);

++、–叫做自增、自减,简单点说a++相当于a+=1,也就是自增1,a–就是自减1,例如下面这个例子,int a=1;a++;输出a,所以a=2。–是一样的道理,但是++、–还有一种写法:++a、–a,【++在前和++在后的区别请点击】

int a = 1;
a++;
System.out.println(a);

二、赋值运算符

在这里插入图片描述

=是赋值符号,=左边一般是变量,右边是表达式,如int a = 10;+=、-=、*=、/=、%=是复合赋值符号,如a+=10,,等价于a = a+10;【++在前和++在后的区别请点击】

int a = 10;
a += 10;//等价于a = a+10;

思考:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
  对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
  对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

三、关系运算符

在这里插入图片描述
关系运算符又称为比较运算符,关系运算符的返回值一定是boolean类型,一般做判断语句。

int a = 10;
int b = 8;
if(a>b) {
    
    
	System.out.println(a);
}else {
    
    
	System.out.println(b);
}

四、逻辑运算符

在这里插入图片描述
逻辑运算符包括:&(逻辑与)、|(逻辑或)、!(逻辑非)、&&(短路与)、||(短路或)、^(逻辑异或),是的,上面的表里面老师没有逻辑与、逻辑或、逻辑异或,原因是在有些分类里面他们也可以被称之&(按位与)、|(按位或)、^(按位异或),老师将其划分到位运算符的分类当中。想了解【&与&&的区别请点击】,下面以&&为例,我们知道&&运算是做并且,就像“我是老师,并且我是一名程序员”这句话是正确的,但是“我是老师,并且我今年18岁”,很明显这是骗人的,所以&&运算时应该是&&两边为真(true)才为真。

System.out.println(false && true);
System.out.println(false && false);
System.out.println(true && false);
System.out.println(true && true);

总结: &&、||、!我们又经常称为与或非。 &&是当且&&两边为真才为true ;||是一边为真则为true;!是取反,真的变成假的,假的变成真的。

五、位运算符

运算符 含义 实例 结果
& 按位与(AND) 5 & 12 4
| 按位或(OR) 11|7 15
~ 按位取反(NOT) ~10 65525
^ 按位异或(XOR) 11^7 12
<< 左移 11<<1 22
>> 右移 11>>1 5

关于位运算符的运算从上表中也能看出,应该是看不出什么规律,所有的运算结果都要转成二进制来计算,例如5&12的运算过程如下图,其运算规则是:先将5和12转成对应的二进制,参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。

在这里插入图片描述

同理,11|7的运算过程如下:简单点说,就是零零得0,其余为1

在这里插入图片描述
~10的运算过程:口诀,零就是1,一就是0

在这里插入图片描述

11^7的运算过程:口诀,相同为0,不同为1
在这里插入图片描述
11<<1的运算过程:左移1位相当于*2

在这里插入图片描述
11>1的运算过程:右移1位相当于/2

在这里插入图片描述

总结:
按位与(&):一一得一,其余为0
按位或(|):零零得0,其余为1
按位取反(!):零就是1,一就是0
按位异或(^):相同为0,不同为1
左移(<<):相当于*2
右移(>>):相当于/2

六、三元运算符

三元运算符又称之为条件运算符,一般语法为:

数据类型 变量名 = 布尔类型表达式?结果1:结果2

当布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。当布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。三元运算符常被用来判断返回两个数中的较大,例如下面这段代码:

int a = 10;
int b = 8;
System.out.println(a>b? a:b);

可以将条件运算符理解为 if-else 语句的简化形式,所以,它也等价于:

int a = 10;
int b = 8;
if(a>b) {
    
    
	System.out.println(a);
}else {
    
    
	System.out.println(b);
}

思考: int a = 10; double b = 8.0; System.out.println(a>b? a:b);是多少?

七、运算符优先级

在这里插入图片描述
相信大家都看到过很多张关于运算符优先级的表,这张表老师也是背不下来的,给大家提供一个记忆方式,一般情况下:算数运算符的优先级是最高的,其次是位运算符、关系运算符、逻辑运算符、最后是赋值运算符。口诀:算位关逻赋。其他细节部分,老师觉得也没有关系,其实是可以通过培养Java语感来提升的。比如,看下面几个例子:

System.out.println(2<<1+1);
System.out.println(3>2<<1);
System.out.println(true && 1>0);
boolean a = true && false;
System.out.println(a);

上面的例子可以自己口算一下答案,一眼看过去是不是感觉有点迷糊,通过口诀试下

//算>位:+是算术运算符,<<是位运算符,先算加法,所以2<<2=8
System.out.println(2<<1+1);
//位(<<)>关(>),所以3>4答案是false
System.out.println(3>2<<1);
//关>逻,所以true && true的结果为true
System.out.println(true && 1>0);
//逻>赋
boolean a = true && false;
System.out.println(a);

你学会了吗?

猜你喜欢

转载自blog.csdn.net/qq_41250372/article/details/124992231