在Groovy中键入Casting

Ant*_*t's 5 groovy

我有两个问题.

我做了以下代码来查找ASCII值$:

def a = "\$"
def b = (int)a 
println b //prints 36
Run Code Online (Sandbox Code Playgroud)

我很满意答案.但当我试图像这样反过来时,我发现我错过了一些东西:

def a = 36
String b = a
println b // getting output only 36 
Run Code Online (Sandbox Code Playgroud)

问题1:

所以我的第一个问题是为什么要打印36,为什么不打印$?我错了吗?

好吧,如果相同的第一个代码块被重写为:

    def a = "\$"
    def b = a as int
    println b
Run Code Online (Sandbox Code Playgroud)

如果我运行此程序,我会收到如下错误:

Caught: java.lang.NumberFormatException: For input string: "$"
    at T.run(T.groovy:2)
Run Code Online (Sandbox Code Playgroud)

即使我想尝试像以前一样.我收到了一个错误.

问题2:

那么,为什么as关键字不会在这里工作,也def a = (int)b就是不等于def a = b as int?请解释一下.

提前致谢.

wie*_*ero 7

当你将一个字符串转换为int时,你可以使用一个字符串,所以我们可以说你将一个字符串转换为int,当你尝试将int转换为字符串时我认为它使用toString方法或类似的东西.尝试将36投射到char,你会看到你的'$'

  • 'as'关键字在内部调用asType方法,我相信它会尝试将String解析为数字,$不是数字 (4认同)