Groovy—为什么一个1位数的字符串会被转换为int的字符?

Groovy—为什么一个1位数的字符串会被转换为int的字符?,groovy,types,Groovy,Types,以下代码输出了令人惊讶的51 int a = "3" println a // outputs 51 Groovy似乎将3字符解释为int,并继续执行 为什么groovy不抛出一个ClassCastException?我怎样才能阻止groovy忽略这些类型的键入错误呢?int a=“3”使用groovy类型强制并自动将“3”转换为char,并将其转换为51的ASCII整数值。对于作为字符串的单个数字(两个或两个以上的数字将生成运行时错误),其行为仅与此类似。此语句的结果与int

以下代码输出了令人惊讶的
51

    int a = "3"
    println a // outputs 51
Groovy似乎将
3
字符解释为
int
,并继续执行

为什么groovy不抛出一个
ClassCastException
?我怎样才能阻止groovy忽略这些类型的键入错误呢?

int a=“3”使用groovy类型强制并自动将“3”转换为char,并将其转换为51的ASCII整数值。对于作为字符串的单个数字(两个或两个以上的数字将生成运行时错误),其行为仅与此类似。此语句的结果与
inta=(char)“3”
相同。这种类型的静默bug可能很讨厌,但是类型检查可以检测到类似这样的错误

在Groovy中,可以在类或方法级别启用静态类型检查

@groovy.transform.TypeChecked
void run1() {
    int a = "3" // triggers type-check exception 
    println a
}

@groovy.transform.TypeChecked
void run2() {
    def a = '3' as int
    println a // outputs 3
}

run1()
run2()
静态类型检查强制执行严格的检查

int a=“3”
使用Groovy类型强制并自动将“3”转换为char,并将其转换为51的ASCII整数值。对于作为字符串的单个数字(两个或两个以上的数字将生成运行时错误),其行为仅与此类似。此语句的结果与
inta=(char)“3”
相同。这种类型的静默bug可能很讨厌,但是类型检查可以检测到类似这样的错误

在Groovy中,可以在类或方法级别启用静态类型检查

@groovy.transform.TypeChecked
void run1() {
    int a = "3" // triggers type-check exception 
    println a
}

@groovy.transform.TypeChecked
void run2() {
    def a = '3' as int
    println a // outputs 3
}

run1()
run2()
静态类型检查强制执行严格的检查