【Groovy】变量和基本数据类型
1 变量 1)变量的声明
int a = 1
def b
def c = 1 在脚本中定义变量无需声明变量的类型,如下。在类不能使用以下方式定义变量,否则会编译报错。
a = 1
b = "abc" 2)变量命名规范
[*]变量名可以由字母、数字、下划线(_)和美元符号($)组成,但是不能以数字开头,且大小写敏感。
[*]不能有空格、@、#、+、-、/ 等符号。
[*]应该使用有意义的名称,达到见名知意的目的,最好以小写字母开头。
[*]不能与 Groovy 语言的关键字或是基本数据类型重名。
3)可变类型变量
使用 def 声明的变量是可变类型变量。以下变量赋值是合法的。
def a = new Object()
a = 1
a = 1f
a = "xyz"
a = new StringBuffer() 以下变量赋值是非法的。
int a = 1
a = "abc"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)) // 打印: null2.1.3 Elvis 运算符(?:)
Elvis 运算符(?:)用于告诉编译器:如果 ?: 前面的值为 null,就取 ?: 后面的值。
String a = "abc"
String b = a ?: "xyz"
println(b) // 打印: abc
String c = null
String d = c ?: "xyz"
println(d) // 打印: xyz2.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.032.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 运算符
运算符描述作用域优先级案例==等于整数/布尔/字符11 == 2 // false 1 == 1 // true!=不等于整数/布尔/字符11 != 2 // true 1 != 1 // false</tdtd小于/tdtd整数/浮点数/字符/tdtd1/tdtd1 < 2 // true/td/trtrtd>大于整数/浮点数/字符11 > 2 // false= 2 // falsein在范围内整数/字符13 in 1..9 // true 9 in 1..
页:
[1]