返回介绍

9. 字符串和字符字面量

发布于 2025-01-04 00:44:51 字数 1150 浏览 0 评论 0 收藏 0

在 Groovy 中,由单引号所创建的字面量属于 String 类型对象,而双引号创建的字面量则可能是 StringGString 对象,具体分类由字面量中是否有插值来决定。

assert 'c'.getClass()==String
assert "c".getClass()==String
assert "c${1}".getClass() in GString  

当把一个包含单个字符的 String 对象赋予一个 char 类型变量时,Groovy 会自动将该对象转换为 char 类型。在调用带有 char 类型实参的方法时,我们需要显式地转换参数值,或者确认参数值已经预先转换过了。

char a='a'
assert Character.digit(a, 16)==10 : 'But Groovy does boxing'
assert Character.digit((char) 'a', 16)==10

try {
  assert Character.digit('a', 16)==10
  assert false: 'Need explicit cast'
} catch(MissingMethodException e) {
}

Groovy 支持两种转换模式。在把一个多字符的字符串转换为 char 类型对象时,两种模式的转换结果会有微小的差别:Groovy 模式的转换更宽容一些,只取第一个字符;C 模式的转换则出现异常错误,从而失败。

// 对于仅包含单个字符的字符串,两种转换模式是等效的   
assert ((char) "c").class==Character
assert ("c" as char).class==Character

// 对于包含多个字符的字符串来说,两种模式的结果并不相同 
try {
  ((char) 'cx') == 'c'
  assert false: 'will fail - not castable'
} catch(GroovyCastException e) {
}
assert ('cx' as char) == 'c'
assert 'cx'.asType(char) == 'c'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文