OTUS将于明天推出新的专业Oracle Java程序员(OCAJP)认证准备程序。我们邀请您观看免费的演示课程“ Java数据类型:标识符和基元”的记录,并继续发表Vladislav Rodin的系列文章-开发组负责人,MIPT老师和foxminded。
介绍
OCA(Oracle认证的Java SE8助理工程师)认证提供了一系列古怪的任务,这些任务测试了对Java编程语言的深入理解。整个块专门用于表达式,循环和运算符。今天我们将讨论后者。
操作员优先
运算符接受参数作为输入并返回一些值。有一元,二进制和三元运算符。例如,!False是一元,a + b是二进制,以及?: -是唯一带有三个参数的运算符。
要记住的第一件事是运算符的优先级:
- 一元后运算符:异常++和异常-
- 一元运算符:++异常和--exception
- 其余的一元运算符:+,-、!
- 乘法,除法,取余数:*,/,%
- 加减法:+,-
- 位移位运算符:<<,>>,>>>
- 比较运算符:<,>,<=,> =,instanceof
- 等式不等号运算符:== ,! =
- 逻辑运算符:&,|,^
- 短路逻辑运算符:&&,||
- 三元运算符:布尔表达式?表达式1:表达式
2 - 赋值运算符:=,+ =,-=,* =,/ =,%=,&=,^ = 、! =,<< =,>> =,>>> =
与一元运算符一起使用
上次我们讨论了二进制运算符。今天,我们将讨论文章标题后面的一元运算符。在考试中,他们可能会提供非常复杂的表达式来进行计算,您需要记住它们的执行顺序。
符号更改和逻辑反转运算符
逻辑逆运算符!仅适用于boolean类型的变量,并将值从true转换为false,反之亦然。例如:
boolean x = false;
System.out.println(x); // false
x = !x;
System.out.println(x); // true
标志更改运算符-仅适用于数字并反符号:
double x = 1.21;
System.out.println(x); // 1.21
x = -x;
System.out.println(x); // -1.21
x = -x;
System.out.println(x); // 1.21
与相同的C语言相比,Java清楚地将整数数据类型和布尔值分开,因此使用符号更改运算符来布尔值或使用逻辑取反运算符会导致编译错误:
int x = !5; // DOES NOT COMPILE
boolean y = -true; // DOES NOT COMPILE
boolean z = !0; // DOES NOT COMPILE
增量和减量运算符
增量++和递减运算符被后递增(递减)和预增量(递减),在代码:施加到整型变量,有两个变化i ++在(我- )和++ I(--I),分别。变体之间的区别在于,++ i递增变量并返回新值,而i ++返回旧值然后才递增变量。在这段代码中可以更清楚地看到差异:
int counter = 0;
System.out.println(counter); // Outputs 0
System.out.println(++counter); // Outputs 1
System.out.println(counter); // Outputs 1
System.out.println(counter--); // Outputs 1
System.out.println(counter); // Outputs 0
在考试中,可能会提供各种棘手的任务,这些操作员是货车和小推车。例如,可以提供这样的任务。
该程序将显示什么?
int x = 3;
int y = ++x * 5 / x-- + --x;
System.out.println("x is " + x);
System.out.println("y is " + y);
问题是x在同一行上多次更改。
为了解决这些问题,您可以从左到右解析表达式,将运算符返回的内容替换为表达式,并分别固定要更改的变量的值。例如,像这样:
int y = 4 * 5 / x-- + --x; // x assigned value of 4
int y = 4 * 5 / 4 + --x; // x assigned value of 3
int y = 4 * 5 / 4 + 2; // x assigned value of 2
如您所见,以上所有适用运算符的规则均适用。结果将如下所示:
x is 2
y is 7