首页 > 解决方案 > 将字符串分配给整数时的Groovy不一致行为

问题描述

运行此代码时:

String number = "1"
Integer x
println number
x = number
println(x)

输出是:

1 49

并在运行此代码时:

String number = "10"
Integer x
println number
x = number
println(x)

我得到:

10

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

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

标签: stringgroovytype-conversioninteger

解决方案


您的第一个示例的内部工作原理是字符的ASCII编码0是 48,for1是 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 值),因为现在有两个字符。


推荐阅读