1 变量
1)变量的声明 在脚本中定义变量无需声明变量的类型,如下。在类不能使用以下方式定义变量,否则会编译报错。 2)变量命名规范
- 变量名可以由字母、数字、下划线(_)和美元符号($)组成,但是不能以数字开头,且大小写敏感。
- 不能有空格、@、#、+、-、/ 等符号。
- 应该使用有意义的名称,达到见名知意的目的,最好以小写字母开头。
- 不能与 Groovy 语言的关键字或是基本数据类型重名。
3)可变类型变量
使用 def 声明的变量是可变类型变量。以下变量赋值是合法的。- def a = new Object()
- a = 1
- a = 1f
- a = "xyz"
- a = new StringBuffer()
复制代码 以下变量赋值是非法的。2 基本数据类型
Groovy 中基本数据类型主要有空类型(void)、整数类型(byte、short、int、long、BigInteger)、浮点类型(float、double、BigDecimal)、字符类型(char)、字符串类型(String)。
2.1 空类型
2.1.1 void 和 null
Groovy 中空类型用 void 表示,空值用 null 表示,与 java 的使用方法一样,如下。- BigInteger a = null
- def b = null
- void fun1() {
- /***/
- }
- Object fun2() {
- return null
- }
复制代码 2.1.2 安全访问符(?.)
安全访问符(?.)用于告诉编译器:如果对象非空才访问点后面的内容,否则不做任何处理。- String a = "abc"
- println(a?.substring(1)) // 打印: bc
- String b = null
- println(b?.substring(1)) // 打印: null
复制代码 2.1.3 Elvis 运算符(?:)
Elvis 运算符(?:)用于告诉编译器:如果 ?: 前面的值为 null,就取 ?: 后面的值。- String a = "abc"
- String b = a ?: "xyz"
- println(b) // 打印: abc
- String c = null
- String d = c ?: "xyz"
- println(d) // 打印: xyz
复制代码 2.2 数字类型
2.2.1 整数类型
1)整数类型变量
类型大小(位)最小值最大值案例byte8-128127byte a = 1short16-3276832767short a = 1int32-2,147,483,648 (-2^31)2,147,483,648(2^31-1)int a = 1 def a = 100 def a = 100I def a = 100ilong64-9,223,372,036,854,775,808(-2^63)9,223,372,036,854,775,807 (2^63-1)long a = 1 def a = 12345678901 def a = 100L def a = 100lBigInteger——————BigInteger a = 1 def a = new BigInteger('123') def a = 1G def a = 1g 2)整数的进制表示- // 二进制(以0b开头)
- def a = 0b101
- // 八进制(以0开头)
- def a = 0765
- // 十六进制(以0x开头)
- def a = 0x8af
复制代码 3)数字分割- def a = 1_23_456_7
- def b = 1.23_456_7
- def c = 0xFF_FF_FF
复制代码 4)times- 4.times {
- println(it) // 打印: 0、1、2、3
- }
- 4.7.times {
- println(it) // 打印: 0、1、2、3
- }
复制代码 说明:Groovy 中的 times 函数与 Kotlin 中的 repeat 函数有些类似。
2.2.2 浮点类型
1)浮点类型变量
类型大小(位)符号位(S)/ 阶码(E)/ 尾数(M)最小值/ 最大值/ 最小正数有效位数案例float321S + 8E + 23M-3.4028235E38 3.4028235E38 1.4E-456float a = 1.0 def a = 1.0F def a = 1.0fdouble641S + 11E + 52M-1.7976931348623157E308 1.7976931348623157E308 4.9E-32415double a= 1.0 def a = 1.0D def a = 1.0dBigDecimal————————BigDecimal a = 3.14 def a = new BigDecimal('3.14') def a = 3.14G def a = 3.14g 浮点数编码原理详见 → 浮点数编码原理。
2)浮点数科学计数法- double a = 1e2 // 100.0
- double a = 2E1 // 20.0
- double a = 2e+3 // 2000.0
- double a = 3E-2 // 0.03
复制代码 2.2.3 运算符
运算符描述作用域优先级案例+加法整数/浮点数作为一元运算符时,优先级为1 作为二元运算符时,优先级为31 + 2 ⇒ 3-减法整数/浮点数作为一元运算符时,优先级为1 作为二元运算符时,优先级为31 - 2 ⇒ -1*乘法整数/浮点数22 * 3 ⇒ 6/整除/除法整数/浮点数23 / 2 ⇒ 1 3.0 / 2 ⇒ 1.5 3 / 2.0 ⇒ 1.5%取余整数/浮点数27 % 3 ⇒ 1++加1整数/浮点数1a++(先使用, 后加1) ++a(先加1, 后使用)--减1整数/浮点数1a--(先使用, 后减1) --a(先减1, 后使用)=赋值所有类型9a = 1+=加赋值整数/浮点数9a += 1 ⇔ a = a + 1-=减赋值整数/浮点数9a -= 2 ⇔ a = a - 2*=乘赋值整数/浮点数9a *= 3 ⇔ a = a * 3/=除赋值整数/浮点数9a /= 4 ⇔ a = a / 4%=取余赋值整数/浮点数9a %= 5⇔ a = a % 52.3 布尔类型
2.3.1 布尔类型
类型大小(位)取值案例boolean1true / falseboolean a = true def a = false boolean a = 100 // true boolean a = -100 // true boolean a = 0 // false2.3.2 运算符
[table][tr]运算符描述作用域优先级案例[/tr][tr][td]==[/td][td]等于[/td][td]整数/布尔/字符[/td][td]1[/td][td]1 == 2 // false 1 == 1 // true[/td][/tr][tr][td]!=[/td][td]不等于[/td][td]整数/布尔/字符[/td][td]1[/td][td]1 != 2 // true 1 != 1 // false[/td][/tr][tr][td]</tdtd小于/tdtd整数/浮点数/字符/tdtd1/tdtd1 < 2 // true/td/trtrtd>[/td][td]大于[/td][td]整数/浮点数/字符[/td][td]1[/td][td]1 > 2 // false[/td][/tr][tr][td]= 2 // false[/td][/tr][tr][td]in[/td][td]在范围内[/td][td]整数/字符[/td][td]1[/td][td]3 in 1..9 // true 9 in 1.. |