相关文章
更多最近更新
更多Groovy 运算符详解
2019-04-27 16:58|来源: 网路
运算符是一个符号,通知编译器执行特定的数学或逻辑操作。
Groovy中有以下类型的运算符 -
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
算术运算符
Groovy语言支持正常的算术运算符任何语言。以下是在Groovy中可用的算术运算符 -
运算符 | 描述 | 例子 |
+ | 两个操作数的加法 | 1 + 2 将得到 3 |
- | 第一第二操作数相减 |
2 - 1 将得到 1 |
* | 两个操作数的乘法 | 2 * 2 将得到4 |
/ | 两个操作数的除法 | 3/2 将得到 1.5 |
% | 取模运算 | 3%2 将得到 1 |
++ | 自增运算,在自身值的基础上加1 | INT X = 5; X ++; X 将得到 6 |
-- | 自减运算,在自身值的基础上减1 |
INT X = 5; X - -; X 将得到 4 |
关系运算符
关系运算符允许对象的比较。以下是在Groovy中可用的关系运算符 -
运算符 | 描述 | 例子 |
---|---|---|
== | 测试两个对象之间是否相等 | 2 == 2 将得到 true |
!= | 测试两个对象之间是否不等 | 3 != 2 将得到 true |
< | 检查是否左边的对象是小于右边的对象。 | 2 < 3 将得到 true |
<= | 检查是否向左对象是小于或等于右边的对象 | 2 <= 3 将得到 true |
> | 检查是否左边的对象比右边的对象大。 | 3 > 2 将得到 true |
>= | 检查是否向左对象大于或等于右边的对象。 | 3>= 2 将得到 true |
逻辑运算符
逻辑运算符用于计算布尔表达式。以下是在Groovy中提供的逻辑运算符 -
运算符 | 描述 | 例子 |
---|---|---|
&& | 这是逻辑“与”运算 | true && true 得到 true |
|| | 这是逻辑“或”运算 | true || true 得到 true |
! | 这是逻辑“非”运算 | !true 得到 false |
位运算符
Groovy中提供了四个位运算符。以下是在Groovy中可用的位运算符 -
运算符 | 描述 |
---|---|
& | 这是位“与”运算 |
| | 这是按位“或”运算 |
^ | 这是按位“异或”或异或运算符 |
〜 | 这是按位反运算符 |
这里是显示这些运算符的真值表。
p | q | p&Q | p | q | p ^ Q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
赋值运算符
Groovy语言也提供了赋值操作符。以下是在Groovy提供的赋值运算符 -
运算符 | 描述 | 例子 |
---|---|---|
+= | A += B 等价于 A = A+B | DEF A = 5 A += 3 输出将是8 |
-= | A -= B 等价于 A = A-B | DEF A = 5 A -= 3 输出将是2 |
*= | A *= B 等价于 A= A*B | DEF A = 5 A *= 3 输出将是15 |
/= | A /= B 等价于 A = A/B | DEF A = 6 A /= 3 输出将是2 |
(%)= | A (%)= B 等价于 A = A % B | DEF A = 5 A %= 3 输出将是2 |
范围运算符
Groovy支持范围的概念,并在..符号的帮助下提供范围运算符的符号。下面给出了范围运算符的一个简单示例。
def range = 0..5
这只是定义了一个简单的整数范围,存储到一个局部变量称为范围内的下限为0和上限为5。
以下代码段显示了如何使用各种运算符。
class Example { static void main(String[] args) { def range = 5..10; println(range); println(range.get(2)); } }
当我们运行上面的程序,我们会得到以下结果 -
从println语句中,可以看到显示在range语句中定义的整个数字范围。
get语句用于从定义的范围中获取一个对象,它将索引值作为参数。
[5, 6, 7, 8, 9, 10] 7
运算符优先级
下表按优先级顺序列出了所有groovy运算符
运算符 | 名称 |
---|---|
++ - + - | 预增/减,一元加,一元减 |
* / % | 乘法,除法,取模 |
+ - | 加法,减法 |
==!= <=> | 等于,不等于,比较 |
& | 二进制/位运算符与 |
^ | 二进制/位异或 |
| | 二进制/按位或 |
&& | 逻辑和 |
|| | 逻辑或 |
= ** = * = / =%= + = - = << = >> = >>> = = ^ = | = | 各种赋值运算符 |
相关问答
更多-
我看了一下字节码,唯一涉及到的地图是用来初始化Car对象的地图。 一旦两个车对象被初始化,它们就被放入一个列表中。 spread运算符将(在这种情况下)转换为对ScriptBytecodeAdapter.getPropertySpreadSafe的调用。 看一下这个方法的来源,你会发现它基本上只是创建一个新的ArrayList并添加了每个对象的请求属性(在本例中为make ): public static Object More ...getPropertySpreadSafe(Class senderCl ...
-
听起来像是猫王运营商的工作 value="${item.sequence ?: 'new'}" 只要它是真的,这将返回item.sequence 。 如果item.sequence是虚假的 ,那么它将返回第二个表达式。 Sounds like a job for the Elvis Operator value="${item.sequence ?: 'new'}" This will return item.sequence as long as it is truthy. If item.sequenc ...
-
哇,这很奇怪。 它看起来像HTML编码错误,但这没有意义。 尝试安全解除引用运算符: def map = ["curr_dept":codes.get("ICU_DEPT").value]; def list = getActLists(visit,"TRAN",map,[]); boolean flag = false; return list?.size() != 0 Wow, that is weird. It looks like an HTML encoding error, but that ...
-
你不要覆盖>=运算符,你实现compareTo : class Foo implements Comparable { int val int compareTo(Object o) { return val <=> ((Foo) o).val } } f1 = new Foo(val: 5) f2 = new Foo(val: 10) println f1 <= f2 => true You don't override the >= operator, you implement compa ...
-
它是否将s ++解释为s = s.next() 是。 要在groovy中重载运算符,您需要根据语言文档实现特定命名的方法 所有(非比较器)Groovy运算符都有一个相应的方法,您可以在自己的类中实现。 唯一的要求是您的方法是公共的,具有正确的名称,并具有正确数量的参数。 ++的方法是next() Does it interpret s++ as s = s.next() Yes. To overload operators in groovy you implement specifically named ...
-
你可以覆盖asBoolean来映射到evaluate方法吗? 有了这个,你将拥有: Rule rule = new Rule() .. if (rule) { // rule.evaluate() } if (!rule) { // !rule.evaluate() } 如果您有足够的冒险精神,可以实现自定义ASTTransformation,以便在语言中添加运算符。 访问ClassNode以查找NotExpression并将此表达式转换为MethodCallExpression 。 You can o ...
-
正如您在引用的有关使用Closures而不是mocks的页面上所述,它们本身仅适用于模拟接口,并且仅当该接口具有单个方法时才有效。 因此,如果被测试的类没有使用接口,或者您需要模拟多个方法,则需要使用Expando或Map。 我更喜欢保持一致并始终使用Map,我处理的代码很少需要使用单个接口方法模拟的对象,并且使用Map不需要更多的击键。 interface Foo { def someMethod(s) } // Closure, this breaks if someOtherMethod() ...
-
Groovy的“in”运算符,用于包含String和GString元素的列表(Groovy's “in” operator for lists with String and GString elements)[2022-03-31]
你可以使用*. 扩展运算符以轻松获取字符串(请参阅下面的list2示例)。 但是你的检查可以通过intersect更容易完成。 Listlist = ["test-${1+2}", "test-${2+3}", "test-${3+4}"] List subl = ["test-1", "test-2", "test-3"] assert subl.findAll{ it in list }==[] // wrong // use intersect for a shor ... -
您是否尝试重写Object#asType(Class)方法? Have you tried overriding Object#asType(Class) method ?
-
Groovy不寻常的约定(Groovy unusual convention)[2022-03-06]
这是一个方法指针 convert现在实际上是一个Closure,它委托给parse方法 例 这里没有一个例子来定义 , mrhaki在这里做了一篇关于它的帖子 。 作为显示它处理重载的示例,请考虑使用2个静态方法的类: class Test { static void printSomething( String thing ) { println "A:$thing" } static void printSomething( String thing, String thing2 ...