string - 将字符串分配给整数时的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
最好不要陷入这样的情况,但它的行为方式不一致,我对内部工作原理感到好奇。
解决方案
您的第一个示例的内部工作原理是字符的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 值),因为现在有两个字符。
推荐阅读
- scipy - scipy.special.expn(n,x) 用于复杂值?
- c# - 两个数据类型变量在 C# 中相互引用
- c - 强制子小部件尊重父小部件绘图区域(如圆角)
- symfony - 尝试在 Doctrine 固定装置中设置相关对象时出现 ORMInvalidArgumentException
- reactjs - 地图中的条件在 ReactJS 中产生错误
- google-drive-api - 当有多个帐户登录时 gapi.drive.share.ShareClient 失败
- python-3.x - Ubuntu 终端从 Anaconda 基础环境开始(如何纠正?)
- java - Jenkins Artifactory 插件 + Maven Flatten 插件 + rtMavenDeployer。有没有办法部署扁平化的 pom 文件?
- reactjs - 在父状态更改后更新子组件
- c - 使用节点实现堆栈,函数外部不知道顶部节点指针,顶部指针始终为NULL