前言
上一篇我们讲了运算符前三个:算术运算符,赋值运算符,比较运算符,这一篇呢,我们讲剩下的三个运算符,代码量还会比之前多一些,但是我的每一步还是会有代码演示,兄弟们完全放心,跟着我走即可,就是为了兄弟们学习起来轻松,还是那句话,兄弟们动起手来,我们一起在java世界里历险,废话不多说,咱们往下看!!!
一.介绍
在java中我们要进行大量的运算,java中也为我们提供了大量的运算符,我们常用的运算符有那些呢,下面我们来一一的给大家介绍一下。
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。运算符大致可以分为5种类型:算术运算符、条件运算符、关系运算符、赋值运算符和逻辑运算符。
二.知识点介绍
1、运算符概念
2、算术运算符(上一篇文章有讲)
3、赋值运算符(上一篇文章有讲)
4、比较运算符 (上一篇文章有讲)
5、逻辑运算符
6、三元运算符
7、运算符优先级
8、Debug详解
三.知识详解
1、运算符概念
运算符是用来计算数据的指令。数据可以是常量,也可以是变量。被运算符操作的数成为操作数。
例如:
int x = 3;
int y = 4;
int z = x + y;//磊哥java历险记 @51博客
2、逻辑运算符
用于计算两个布尔值经过指定逻辑后的运算结果,结果同样是一个布尔值
运算符
运算规则
范例
结果
&
与(并且)
false&true
False
|
或
false|true
True
^
异或
true^flase
True
!
非(取反)
!true
Flase
&&
短路与
false&&true
False
||
短路或
true ||true
True
作用:逻辑运算符用于连接布尔型表达式,在Java中不可以写成33 && x<6 。
基本使用: &(与),|(或),^(异或),!(非)
- 与:& 有false则false
- 或:| 有true则true
- 异或:^ 相同则false,不同则true
- 非:! true则false,false则true
代码演示:
package com.Test;
/*
逻辑运算符的返回值和操作数都是boolean类型。
&& 中两个操作数都为 true,结果才为 true,否则为 false。
其中 & 的操作数为 boolean 类型时也可以表示逻辑运算。
与:& 有false则false
或:| 有true则true
异或:^ 相同则false,不同则true
非:! true则false,false则true
*/
public class Main {
private final static String name = "磊哥java历险记 @51博客";
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
// false & false
System.out.println((a > b) & (a > c));
// true & false
System.out.println((a < b) & (a > c));
// false & true
System.out.println((a > b) & (a < c));
// true & true
System.out.println((a < b) & (a < c));
System.out.println("==========="+name +"===========");
// false | false
System.out.println((a > b) | (a > c));
// true | false
System.out.println((a < b) | (a > c));
// false | true
System.out.println((a > b) | (a < c));
// true | true
System.out.println((a < b) | (a < c));
System.out.println("---------------");
// false ^ false
System.out.println((a > b) ^ (a > c));
// true ^ false
System.out.println((a < b) ^ (a > c));
// false ^ true
System.out.println((a > b) ^ (a < c));
// true ^ true
System.out.println((a < b) ^ (a < c));
System.out.println("==========="+name +"===========");
System.out.println((a > b)); // false
System.out.println(!(a > b)); // !false
System.out.println(!!(a > b)); // !!false
}
}
&&和&的区别
&是叫按位与,即在运算符号两边的表达式的结果都为“正确”时,那结果就是正确的;在运算符号两边的表达式的结果只要有一个为“错误”那结果就是错误的。
&&是叫短路与,也叫逻辑与,相当于“和”的意思。
单&时:左边无论真假,右边都进行运算;
双&时:如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
代码演示:
package com.Test;
/*
磊哥java历险记 @51博客
“&”时:左边无论真假,右边都进行运算;
“&&”时:如果左边为真,右边参与运算;如果左边为假,那么右边不参与运算。
&& 会出现短路,通过第一个表达判断整个表达式的结果,后面的表达式将不会运算。
&不会出现短路,将整个表达式都进行运算,&既可操作 boolean 数据还可以操作数
*/
public class Main {
private final static String name = "磊哥java历险记 @51博客";
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
System.out.println((a > b) && (a > c));// false && false
System.out.println((a < b) && (a > c)); // true && false
System.out.println((a > b) && (a < c)); // false && true
System.out.println((a < b) && (a < c)); // true && true
System.out.println("==========="+name +"===========");
System.out.println((a > b) || (a > c));// false || false
System.out.println((a < b) || (a > c)); // true || false
System.out.println((a > b) || (a < c)); // false || true
System.out.println((a < b) || (a < c)); // true || true
System.out.println("---------------");
int x = 3;
int y = 4;
System.out.println((x++ > 4) & (y++ > 5)); // false & false
System.out.println((x++ > 4) && (y++ > 5)); // false && false
System.out.println("x:" + x);
System.out.println("y:" + y);
}
}
3、 三元运算符
接下来我们要学习的三元运算符与之前的运算符不同。之前学习的均为一元或者二元运算符。元即参与运算的数据。格式:(条件表达式)?表达式1:表达式2;
表达式:通俗的说,即通过使用运算符将操作数联系起来的式子,例如:3+2,使用算数运算符将操作数联系起来,这种情况,我们称为算数表达式。
3>2,使用比较运算符(也称为条件运算符)将操作数联系起来,这种情况,我们称为条件表达式。其他表达式,感兴趣的兄弟们下去可以再扩充一下,我就不再一一举例。
三元运算符运算规则:
先判断条件表达式的值,若为true,运算结果为表达式1;若为false,运算结果为表达式2。
注意:
三元运算符,最终一定会产生一个结果值,这个值必须被使用起来。要么被运算符使用,要么被打印
格式:
(条件表达式) ? 表达式1 : 表达式2;
执行流程:
- 首先判断条件表达式是否成立
- true:表达式1作为3元运算符的结果
- false:表达式2作为3元运算符的结果
代码演示:
package com.Test;
/*
磊哥java历险记 @51博客
三元运算符:求两个数的最大值,判断两个数是否相等
格式:
(条件表达式) ? 表达式1 : 表达式2;
执行流程:
首先判断条件表达式是否成立
true:表达式1作为3元运算符的结果
false:表达式2作为3元运算符的结果
注意:
三元运算符,最终一定会产生一个结果值,这个值必须被使用起来。
要么被运算符使用,要么被打印
*/
public class Main{
private final static String name = "磊哥java历险记 @51博客";
public static void main(String[] args){
int a = 10;
int b = 20;
int max = (a > b) ? 10 : 20;
System.out.println("max = " + max);
System.out.println("==========="+name +"===========");
int c = 15;
int d = 10;
//System.out.println((c != d) ? "相等" : "不相等");
String s = (c != d) ? "相等" : "不相等";
System.out.println("s = " + s);
//(c != d) ? "相等" : "不相等";//错误: 不是语句
}
}
4、运算符优先级
4.1、优先级概念
运算符运算的先后顺序,优先级越高(数字越小),计算顺序越靠前。
4.2、优先级规则
优先级相同的情况下,按照从左到右的顺序依次运算
优先级
描述
运算符
1
括号
()、[]
2
正负号
+、-
3
自增自减,非
++、--、!
4
乘除,取余
*、/、%
5
加减
+、-
6
移位运算
<<、>>、>>>
7
大小关系
>、>=、<、<=
8
相等关系
==、!=
9
按位与
&
10
按位异或
^
11
按位或
|
12
逻辑与
&&
13
逻辑或
||
14
条件运算
?:
15
赋值运算
=、+=、-=、*=、/=、%=
16
位赋值运算
&=、|=、<<=、>>=、>>>=
四.debug测试
测试代码的运行和输出结果,是每位开发工程师的必须要会的技能,再牛的大神都会用到debug测试,debug测试不仅能帮助我们熟悉程序运行的过程,更是能帮助我们加深对程序的理解,我们能一步一步更加直观的看到数值之间的传递逻辑。
再加上我们后期的代码会越来越多,不像现在基础期间,我们能一眼看出代码问题的所在,所以debug技能我们必须掌握,为了后面我们能更加熟练掌握程序的运行和排错,今天就和大家聊聊debug的教程。
我们以IDEA开发工具为例,给大家实际演示,其他开发工具也是大同小异,不必担心哈 。
按钮介绍:
我们之前说过正常运行点击“绿色的倒三角”即可,它旁边的小飞虫样子的按钮就是debug模式的启动按钮:
debug启动前,需要我们先设置自己想要的拦截点,与代码平齐的左边框,点击即可出现红点,红点就是标记的断点(拦截点)
提示:在断点调试过程中,是以对象的运行类型来执行的,程序是运行状态.
我们启动debug运行:
1:debug运行状态,表示当前debug模式,可以随时添加断点进行测试
2: 程序运行状态
3:debug控制台,可以显示出来变量值区域
4:从左到右依次是:
Show Execution Point (Alt + F10):你的鼠标光标在其它行,点击这个按钮直接就能跳转到当前在执行的代码行。
Step Over (F8):步过,按照代码一行一行地执行,这一行上如果有方法调用那不会进入方法体。
Step Into (F7):步入,如果当前代码有调用方法,可以进入方法体,一般用来进入自定义方法内。
Force Step Into (Alt + Shift + F7):强制步入,能进入任何方法体,可查看底层源码的方法。
Step Out (Shift + F8):步出,从步入的方法体直接出来,此时方法执行完毕,但是没有完成赋值。
Drop Frame (默认无):回退断点。
Run to Cursor (Alt + F9):运行到鼠标光标处,将光标定位到你需要查看的那一行代码,然后点击按钮,代码会运行至光标所在的代码,而且不需要打断点。
Evaluate Expression (Alt + F8):计算表达式。
5:我们代码执行时变量的变化就在这里能看到,变量,对象都可以。
6:从上往下依次是:
Rerun '***':重新运行程序,关闭掉服务后重新启动程序。
Resume Program (F9):恢复程序,只执行,打断点的代码,没有打断点的地方就直接运行跳过了。
Pause Program:暂停程序,启用Debug。。
Stop '***' (Ctrl + F2):连续按两下,关闭程序服务,停止运行。
View Breakpoints (Ctrl + Shift + F8):查看所有断点。
Mute Breakpoints:灰断点,点击后,所有断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变为红色,有效。
debug运行效果:
结语:
运算符咱们就聊到这里,分为两篇给大家详细说明,我把每一步的代码和演示都贴在了文章里,兄弟们可以按照我的演示代码自己动手敲一遍,感受一下这个过程,我也从这个阶段走过来过,完全能体会兄弟们的不容易,所以我宁愿麻烦一些也要让每一位初学者最起码看的明白,这样也不枉我费这么大功夫,兄弟们,还是那句话,动起手来,切勿复制粘贴,让学习变得值得!奥里给!