新手开车,先上代码,后边解析!
能看懂代码就不要看解析!
PS:命名规范,i代指int类型,l代指long类型,I代指Integer类型,L代指Long类型,2(transferTo);
// 首先创建四个基本操作对象
Long L0 = 123456l;
int i0 = 10;
Integer I0 = new Integer(10);
long l0 = 1234l;
// int -> long
long i2l = i0;// 自动转换
// long -> int
int l2i = (int)l0;// 强转
// int/long -> Integer
Integer i2I1 = i0;
Integer i2I2 = new Integer(i0);// 自动封箱
// Integer l2I1 = new Integer(l0);// 报错
Integer l2I2 = new Integer((int)l0);// long类型不能直接转换为Integer类型,中间需要强转一次
// int/long -> Long
Long i2L = new Long(i0);
Long l2L1 = l0;
Long l2L2 = new Long(L0);
// Integer -> int/long
int I2i1 = I0;// 自动拆箱
int I2i2 = I0.intValue();// api获取
long I2l1 = I0;
long I2l2 = I0.longValue();
// Long -> int/long
int L2i1 = L0.intValue();
long L2l1 = L0;
long L2l2 = L0.longValue();
// Long <-> Integer,不能强制获取,中间需要转换一次
Integer L2I1 = L0.intValue();
Long I2L1 = I0.longValue();
解析:
int 类型数据转换为:long、Integer、Long ;
int -> long :属于小类型向大类型转换(大小指取值范围),自动转换(大本身包含小范围数据);
int -> Integer :基本数据类型向包装数据类型转换,自动封箱。直接赋值或者new的时候装进去;
int -> Long : 同上。
long 类型数据转换为:int、Integer、Long;
long -> int :大类型向小类型转换,需要强制转换。结果前边加需要的数据类型,如本文强转为int类型 “(int)”;注意,如果需要强转的数据本身超过目标类型范围会出现数据错误,比如byte范围仅为[-128, 127],int类型的128转换为byte数据类型的时候会返回-128,在校范围内循环获取;
long -> Integer : 需要将获取到的long类型数据强转一次再进行封装;
long -> Long : 基本数据类型向包装数据类型转换,自动封箱。直接赋值或者new的时候装进去。
Integer 类型数据转换为:int、long、Long;
Integer -> int : 包装数据类型向基本数据类型转换,自动拆箱。可以直接获取值或者调用获取值得api;
Integer -> long :自动拆箱获取对应int类型数据之后会自动转化为long类型;
Integer -> Long : 不能强制或直接获取,中间需要int/long类型作为中间类型过渡。
Long 类型数据转换为:int、long、Integer;
Long -> int : 包装数据类型向小范围的基本数据类型转换,自动拆箱之后需要强制转换。或者调用获取值得api;
Long -> long : 包装类型转基本类型,自动拆箱;
Long -> Integer : 不能强制或直接获取,中间需要int/long类型作为中间类型过渡。
工作的时候由于两个项目的对接没有做好,导致有个字段数据类型不一致(一边定义为Integer,一边定义为Long),试了几次都不能强制转换,专门上网搜了一下,引以为戒!
参考文献:https://blog.csdn.net/u014039577/article/details/37925611