问题只是源于在调试的时候发现的一句微不足道的一行代码如下:
/su.setOperType((Integer)param.get(SpeedMessageKey.OPERTYPE.getValue()));/
首先 将现出上面各个类的原型
public enum SpeedMessageKey {
/**
public String getValue(){
return this.value;
}
}这个是枚举类,枚举类中有这个OPERTYPE这个元素。
而param定义的是一个map如下:
Map
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类型
————————————————
原文链接:https://blog.csdn.net/sunzheng12345/article/details/8160686