第 6 课:运算符
运算符是一些特殊的符号,用来对一个或两个操作数 执行特定的运算,然后返回一个结果。JavaFX Script 编程语言提供赋值运算符、算术运算符、一元运算符、相等和关系运算符、条件运算符和类型比较运算符。
目录
- 赋值运算符 - 算术运算符 - 一元运算符 - 相等和关系运算符 - 条件运算符 - 类型比较运算符
赋值运算符 "=" 是您将遇到的最常用的运算符。使用该运算符可以将其右侧的值赋给其左侧的操作数:
result = num1 + num2; days = ["Mon","Tue","Wed","Thu","Fri"];
在前面的许多课程中,您已经使用过该运算符。
使用算术运算符 可以执行加、减、乘和除运算。mod
运算符用一个操作数除以另一个操作数并将余数作为结果返回。
+ (加运算符) - (减运算符) * (乘运算符) / (除运算符) mod (求余运算符)
以下脚本提供了一些示例:
var result = 1 + 2; // result is now 3 println(result); result = result - 1; // result is now 2 println(result); result = result * 2; // result is now 4 println(result); result = result / 2; // result is now 2 println(result); result = result + 8; // result is now 10 println(result); result = result mod 7; // result is now 3 println(result);
您还可以结合使用算术运算符与赋值运算符来创建复合赋值 。例如,result += 1;
和 result = result+1;
都会将 result
的值加 1。
var result = 0; result += 1; println(result); // result is now 1 result -= 1; println(result); // result is now 0 result = 2; result *= 5; // result is now 10 println(result); result /= 2; // result is now 5 println(result);
唯一不能按照此方式使用的算术运算符是 mod
。例如,如果您希望将 result
除以 2,然后将余数重新赋给其自身,则需要编写:result = result mod 2;
大多数运算符都需要两个操作数,而一元运算符 仅使用一个操作数来执行诸如按一递增/递减某个值、对某个数字求反或对布尔值求反之类的操作。
- 一元减运算符;对某个数字求反 ++ 递增运算符;按 1 递增某个值 -- 递减运算符;按 1 递减某个值 not 逻辑求补运算符;对布尔值求反
以下脚本用于测试一元运算符:
var result = 1; // result is now 1 result--; // result is now 0 println(result); result++; // result is now 1 println(result); result = -result; // result is now -1 println(result); var success = false; println(success); // false println(not success); // true
递增/递减运算符可以在操作数之前(前缀)或之后(后缀)应用。代码 result++;
和 ++result;
都将导致 result
的值加 1。二者之间的唯一区别就是前缀版本 (++result
) 得到的是递增后的值,而后缀版本 (result++
) 得到的是原始值。(您可以通过以下方法来记忆:++result
先执行递增再获得值,而 result++
先获得值再执行递增。)如果您只是执行简单的递增/递减,则选择哪个版本都一样。但是,如果您将该运算符作为较大表达式的一部分进行使用,则选择不同的版本会对结果产生很大的影响。
以下脚本说明了这种区别:
var result = 3; result++; println(result); // result is now 4 ++result; println(result); // result is now 5 println(++result); // result is now 6 println(result++); // this still prints 6! println(result); // but the result is now 7
相等和关系运算符确定一个操作数是大于、小于、等于还是不等于另一个操作数。
== 等于 != 不等于 > 大于 >= 大于或等于 < 小于 <= 小于或等于
以下脚本用于测试这些操作数:
def num1 = 1; def num2 = 2; println(num1 == num2); // prints false println(num1 != num2); // prints true println(num1 > num2); // prints false println(num1 >= num2); // prints false println(num1 < num2); // prints true println(num1 <= num2); // prints true
条件与 (and) 和条件或 (or) 运算符用于对两个布尔表达式执行条件运算。这些运算符会表现出“短路”行为,也就是说,仅在必要时才计算第二个操作数:例如,对于 and
运算,如果第一个表达式的结果为 false,将不计算第二个表达式。对于 or
运算,如果第一个表达式的结果为 true
,将不计算第二个表达式。
以下脚本定义了 username
和 password
变量,然后输出各个条件的匹配项,从而说明了这些运算符的用法:
def username = "foo"; def password = "bar"; if ((username == "foo") and (password == "bar")) { println("Test 1: username AND password are correct"); } if ((username == "") and (password == "bar")) { println("Test 2: username AND password is correct"); } if ((username == "foo") or (password == "bar")) { println("Test 3: username OR password is correct"); } if ((username == "") or (password == "bar")) { println("Test 4: username OR password is correct"); }
输出为:
Test 1: username AND password are correct Test 3: username OR password is correct Test 4: username OR password is correct
instanceof
运算符将对象与指定的类型相比较。您可以使用该运算符来确定某个对象是否为特定类的实例:
def str1="Hello"; println(str1 instanceof String); // prints true def num = 1031; println(num instanceof java.lang.Integer); // prints true
在本教程的最后一课中深入了解类和继承后,您将发现该运算符非常有用。