String 将字符串赋给整数时Groovy的不一致行为

String 将字符串赋给整数时Groovy的不一致行为,string,groovy,type-conversion,integer,String,Groovy,Type Conversion,Integer,运行此代码时: String number = "1" Integer x println number x = number println(x) String number = "10" Integer x println number x = number println(x) 输出为: 一, 49 运行此代码时: String number = "1" Integer x println number x = number

运行此代码时:

String number = "1"
Integer x
println number
x = number
println(x)
String number = "10"
Integer x
println number
x = number
println(x)
输出为:

一, 49

运行此代码时:

String number = "1"
Integer x
println number
x = number
println(x)
String number = "10"
Integer x
println number
x = number
println(x)
我得到:

十,

org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法 将类为“java.lang.String”的对象“10”强制转换为类 “java.lang.Integer”


我知道使用
toInteger
可以解决这个问题,最好不要陷入这样的情况,但它的行为方式是不一致的,我对内部工作方式很好奇。

第一个示例的内部工作方式是,字符
0
的长度为48,而对于
1
的长度为49

换句话说,表达式:

Integer x = "1"
正在要求groovy将字符
1
转换为一个整数,它很乐意这样做,并返回整数ascii值49。java中也会发生同样的情况:

char c = "1".charAt(0);
int i = (int) c;
System.out.println(i);
也印了49张


这与字符串“10”不同,不再可能将这两个字符强制为单个int(ascii值),因为现在有两个字符。

您的问题是什么?