您的位置:首页 > 编程语言 > Java开发

java.lang.String cannot be cast to java.lang.Integer报错

2012-11-08 09:59 441 查看
问题只是源于在调试的时候发现的一句微不足道的一行代码如下:

/*su.setOperType((Integer)param.get(SpeedMessageKey.OPERTYPE.getValue()));*/

首先 将现出上面各个类的原型

public enum SpeedMessageKey {

/**

* 申请操作0:开始提速;1:停止提速

*/

OPERTYPE("operType"),

SpeedMessageKey(String value){

this.value = value;

}

private String value;

public String getValue(){

return this.value;

}

}这个是枚举类,枚举类中有这个OPERTYPE这个元素。

而param定义的是一个map如下:

Map<String,Object> param = reqMessage.getBody();

SpeedMessageKey.OPERTYPE.getValue()这个是个String类型

而在su这个对象中定义了 private Integer operType;

在将String类型强制转换成Integer时 语法没错,但是在编译的时候我们会错。。。就会报java.lang.String cannot be cast to java.lang.Integer

从文字而言可以看出是 String不能转换成Integer类型

那么就用valueof

Object operType = param.get(SpeedMessageKey.OPERTYPE.getValue());

if( operType instanceof String){

su.setOperType(Integer.valueOf((String)operType));

}else{

su.setOperType((Integer)operType);

}

从API中可以看到这个函数。。一个基本类型的数据是不能强制转换成引用类型的 反之也是一样。。

在回首 java类型中的转换 小可转大 大转小会失去精度。。

举个例子

class Conversion {
public static void main(String args[]) {
byte b;
int i = 257;
b = (byte) i;
System.out.println(b);
}
}

这时你认为会输出多少了 告诉你是1

大转小 失去精度。。。

byte是8位的,最大值是256,
int是32位的,

257表示成二进制的时候,是
100000001,
如果int的强制类型转换成byte型,则要取低8位,也就是要把,其余的位丢掉。
所以,257强制类型转换成byte的时候,只能留下00000001,也就是1 了

这是在百度上看到的一个经典例子

一下是一些常见的转换:

如何将字串 String 转换成整数 int?

int i = Integer.valueOf(my_str).intValue();

int i=Integer.parseInt(str);

如何将字串 String 转换成Integer ?

Integer integer=Integer.valueOf(str);

如何将整数 int 转换成字串 String ?

1.) String s = String.valueOf(i);

2.) String s = Integer.toString(i);

3.) String s = "" + i;

如何将整数 int 转换成Integer ?

Integer integer=new Integer(i);

如何将Integer 转换成 int ?

int num=Integer.intValue();

如何将String转换成 BigDecimal ?

BigDecimal d_id = new BigDecimal(str);

如何将 String 转换成 char ?

char[] ca="123".toCharArray();

如何将char转换成String?

String s=ca.toString(); //任何类型都可以采用toString()转换成String类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐