07-Java 中的运算符
原创大约 8 分钟...约 2409 字
1. 目录
- 什么是运算符
- 取模运算符
- 整数的除法运算
- 比较运算符和布尔运算符
- 小括号运算符
- 运算符优先级
- 理解运算符优先级
2. 什么是运算符
- 运算符对一个或者多个值进行运算,并得出一个运算结果。
- 运算符的运算结果类型有的是固定的,有时候会根据被计算的值变化。比如两个 int 相加,结果的类型就是 int。两个 byte 相加,返回值的类型就是 int。
- 混淆点:除赋值运算符外,运算符本身不会更改变量的值
demo.java
public class demo {
public static void main(String[] args) {
byte a = 12;
byte b = 1;
int c = a + b;
System.out.println(c); // 13
}
}
OprtNotChangeVariableValue.java
public class OprtNotChangeVariableValue {
public static void main(String[] args) {
int a = 100;
System.out.println(a + 1); // 101
System.out.println(a); // 100 显然 a 的值没有被修改
a = a + 6;
System.out.println(a); // 106
/*
* 代码运行是先右边再左边的过程
* */
}
}
3. 取模运算 %
- 用来计算余数
- 负数也可以被取模
- 负数也可以取模
- 小数也可以取模
public class ModCalc {
public static void main(String[] args) {
int num = 10;
// System.out.println(num % 2); // 0 // 10 / 2 = 2...0 -> 0
// System.out.println(num % -3); // 1 // 10 / -3 = -3...1 -> 1
// System.out.println(num % 4); // 2 // 10 / 4 = 2...2 -> 1
// System.out.println(num % 5); // 0 // 10 / 5 = 2...0 -> 0
// System.out.println(num % -6); // 4 // 10 / -6 = -1...4
// 如果把 10 改成 -10 呢?
int num1 = -10;
System.out.println(num1 % 2); // 0
System.out.println(num1 % -3); // -1
System.out.println(num1 % 4); // -2
System.out.println(num1 % 5); // 0
System.out.println(num1 % -6); // -4
// 结论:被取模的这个数字(num、num1)的正负,影响最后结果的正负
// 小数的取模也是支持的,但是在我的职业生涯没有遇到过
}
}
4. 整数的除法运算
接下来,讲解一下之前没有讲解的问题。
- int 除以 int 还是 int,不会变成浮点数「两个 int 相乘也是不会变成 double 的」
public class IntegerDiv {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println(a / b); // 3
System.out.println(b / a); // 0
/*
* 整数的除法运算,和数学中的除法运算是不一样的,从算数的角度来说
* 10 / 3 得到的结果应该是 3.333333333...但是实际上,我们计算机 Java 得出来的结果是多少呢?——3
* 这就是整数除法不一样的地方。
* 这也就是为什么在之前加减乘除的课程中,除法时,我们要在其中一个整数添加上 .0
* 【也就是说:10 / 3.0 才能得到我们想要的结果,如果只是 10 / 3 的话就只能得到 3】 */
}
}
这就是我们刚刚说的,除法包括加法,它的运算结果类型,其实取决于被操作数字的数据类型的。比如:int,它和你运算之后结果应该是多少是没有关系的。
所以,要得出正确且是我们想要的结果,就得把其中一个数据改为浮点型。
public class IntegerDiv2 {
public static void main(String[] args) {
int a = 10;
double b = 3.0;
// double b = 3;
System.out.println(a / b); // 3.3333333333333335
}
}
你要是把 a 变成浮点数也是可以的,反正其中有一个浮点数即可。另外的代码示例如下:
public class IntegerDiv3 {
public static void main(String[] args) {
int a = 10;
float b = 3.0f; // 用 double 也是可以的
System.out.println(a / b); // 3.3333333
System.out.println(b / a); // 0.3
}
}
这样就是前面为什么要在两个整数做除法的是,在其中一个要加 .0
原因。「任意一个数是浮点数就可以」
5. 比较运算符和布尔运算符
5.1 比较运算符【双操作数或”多个“】
>
>=
<
<=
!=
==
CompareOprt.java
public class CompareOprt {
public static void main(String[] args) {
int a = 10;
int b = 15;
int c = 10;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
System.out.println(a != b);
System.out.println(a != c);
System.out.println(a >= c);
System.out.println(a <= c);
System.out.println(a == b);
System.out.println(a == c);
}
}
CompareOprt.java
public class CompareOprt {
public static void main(String[] args) {
byte a = 10;
byte b = 15;
byte c = 10;
System.out.println(a > b); // false
System.out.println(a >= b); // false
System.out.println(a < b); // true
System.out.println(a <= b); // true
System.out.println(a != b); // true
System.out.println(a != c); // false
System.out.println(a >= c); // true
System.out.println(a <= c); // true
System.out.println(a == b); // false
System.out.println(a == c); // true
}
}
5.2 布尔运算符
- ! 叫做 非 运算符,not 运算符。
!true
是 false,!false
是 true。【单操作数】 - & 叫做 且 运算符,and 运算符。
true & true
是 true,true & false
是 false。 - && 叫做 且且 运算符,andand 运算符。运算结果和 & 一样。
- | 叫做 或 运算符,or 运算符。
true | false
是 true,false | false
是 false,true | true
是 true。 - || 叫做 或或 运算符,oror 运算符。运算结果和
|
一样。
注意
这里强调一点,根据一个具有实际开发十几年经验的前辈所得来的经验,能用 且且、或或 运算符,尽量使用 且且、或或 ,具体原因先看如下代码:
BooleanOprt.java
public class BooleanOprt {
public static void main(String[] args) {
// 我们也可以使用比较运算符生成的 boolean 来进行比较。
boolean a = true; // 1 < 2
boolean b = false; // 1 > 2
// // && 且且 (andand)
// & 且 (and)
// // | 或或 (oror)
// | 或 (or)
System.out.println(a && b); // false
System.out.println(a & b); // false
System.out.println(a || b); // true
System.out.println(a | b); // true
System.out.println(a || (10 / 0 > 1)); // true
// 这个 或或运算,Java 会对它进行一个优化。
// 就是说:或或左边一旦是符合条件为真「也就是可以决定这个表达式为真」
// 那么它就不会对后面的表达式进行运算了。
System.out.println(a | (10 / 0 > 1)); // true
// 单个或,就是说:不管现在条件是否成立,都要给我判断右边的情况「运算它们」。
// 它对结果没有影响,所以上面我尝试引入一个错误,这样我们就能知道这个表达式到底有没有执行。
// 10 / 0 > 1 本身就是一个错误的表达式
}
}
BooleanOprt.java
public class BooleanOprt {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
// 我们也可以用比较出的结果来运算
// boolean a = 1 < 2;
// boolean b = 1 > 2;
System.out.println(a && b); // false
System.out.println(a & b); // false
System.out.println(a || b); // true
System.out.println(a | b); // true
System.out.println(a || (10 / 0 > 1));
/*对于或来说,后面这个值是 true 还是 false 是个不重要的,因为根据 or 运算规则,
* 只要你有一个是 true 它的结果就会是 true。所以 java 对 oror 运算做出了一个优化,
* 前面这个值已经能决定这个 or 逻辑运算的结果了,无论后面是啥,它都会是 true,那java 就
* 不会对后面的表达式进行运算了。*/
System.out.println(a | (10 / 0 > 1));
/*单个的 or 就是告诉 java 你不要对我进行这层优化,你还要去算这个表达式后面是什么。
* 虽然,它对结果没有影响,
* 但是你还要去算它。虽然最终结果是看不出来,所以这个部分代码我故意引出一个错误,
* 这样我们就知道这个表达式有没有执行,所以会出现如下报错:*/
/*Exception in thread "main" java.lang.ArithmeticException: / by zero
at BooleanOprt.main(BooleanOprt.java:15)*/
}
}
6. 小括号运算符
小括号运算符内可以包含任何运算符,决定运算符的顺序。
public class ParentOprt {
public static void main(String[] args) {
int a = 10;
int b = 88;
boolean c = ((a + b) * a - 9 * (a + b)) == (a + b); // true
System.out.println(c);
}
}
7. 运算符优先级
7.1 运算符优先级
()
!
*
,/
,%
+
,-
>
,>=
,<
,<=
==
!=
&
,&&
,|
,||
=
7.2 理解运算符,灵活记忆优先级
- 为什么等号的优先级最低?「等号是个赋值运算,肯定是要等都运算完了再进行赋值的」
- 为什么布尔运算符的优先级低于比较运算符?「因为布尔运算符操作的是布尔值,除了你直接写 true 或 false 之外,布尔值就是从比较出来的」
- 为什么比较运算符的优先级比算数运算符低?「有可能你要比较的这个数是比较运算符比较出来的」
不要死记硬背,用括号让逻辑更清晰
8. 补充
public class AssignAndCalc {
public static void main(String[] args) {
int a = 10;
a /= 2;
System.out.println(a);
a += 5;
System.out.println(a);
}
}
IED 技巧
- 单行注释快捷键:CTRL + /
- 多行注释快捷键:CTRL + SHIFT + /
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】
AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
你认为这篇文章怎么样?
- 0
- 0
- 0
- 0
- 0
- 0