天天看点

《Groovy语言规范》-语法(二)5.数字

除了通常的带引号字符串,groovy提供斜杠字符串,使用/作为分隔符。斜杠字符串对于定义正则表达式和模式是特别有用的,因为不需要转义反斜杠。

一个斜杠字符串:

只有正斜杠需要反斜杠转义:

斜杠字符串是多行的:

斜杠字符串也能被插值(如,gstring):

有几个陷阱需要注意:

一个空的斜杠字符串不能使用双正斜杠表示,因为它被groovy解析器作为一个单行注释理解。这就是为什么以下断言实际上无法编译,因为它看起来像一个无终止的语句:

美元符斜杠字符串是一个有开口$/和闭口$/界定的多行gstring。这转义字符是美元符,它能转义另一个美元符,或一个正斜杠。但是双美元符和双正斜杠不用被转义,除了转义像gstring占位符序列开始的字符串子序列的美元符,或者你需要转义一个序列,开头看着像闭包美元符斜杠字符串分隔符。

示例:

与java不同,groovy没有显式的字符文本,然而你可以通过三种不同方式,可以将groovy字符串实际作为一个字符使用。

(1)当定义变量时,通过指定char类型,使变量包含字符

(2)通过as操作符使用类型强制转换

(3)通过char操作符做类型转换

第一个选项是(1)有趣的当一个字符在一个变量中,而另外两个(2和3)是更令人关注时char值必须作为一个方法调用的参数。

groovy支持不同类型的整数和小数,通常以java的number类型返回。

整数类型与java相同:

byte

char

short

int

long

java.lang.biginteger

你能以如下定义创建这些类型的整数:

如果你通过使用def关键字使用可选类型,那么整数的类型将是可变的:它取决于这个类型实际包含的值。

对于正数:

对于负数也一样:

二进制数

在java6及以前和groovy一样,数字只能使用十进制,八进制和十六进制表示,使用java7和groovy2你能使用0b前缀作为一个二进制符号:

八进制数

八进制数使用0后面跟八进制数的典型格式表示。

十六进制数

十六进制数使用0x后面跟十六进制数的典型格式表示。

小数类型与java一样:

float

double

java.lang.bigdecimal

你能采用如下定义方式创建这些类型的数字:

小数能使用指数,使用e或e指数字母,紧跟着一个可选符号,且有一个整数表示指数:

为了精确的进行小数计算,groovy选择java.lang.bigdecimal作为小数类型。此外,float和double也被支持,但要求有一个显式类型定义,类型转换或后缀。即使bigdecimal是默认的小数,携带float或double作为类型参数的方法或闭包也可以接受这些数值。

小数不能使用二进制,八进制和十六进制表示。

当写一个很长的数字,使用眼睛很难弄清楚有多少数字组合在一起,例如使用千,单词等组合。通过允许你在数字中添加一些下划线,更容易发现这些组合: