java数据类型转换小总结


一、简单数据类型转换

简单数据类型之间的转换又可以分为:
1.低级到高级的自动类型转换
2.高级到低级的强制类型转换
3.包装类过渡类型能够转换

上图,由低级到高级为:
(byte,short,char)–int–long–float–double
其中,byte型不能自动提升到char,char不能自动提升到short(强制转换不影响)。
在Java中,整数类型(byte/short/int/long)中,对于未声明数据类型的整形,其默认类型为int型。在浮点类型(float/double)中,对于未声明数据类型的浮点型,默认为double型。boolean类型与其他基本类型不能进行类型的转换(自动类型提升和强制类型转换),否则将编译出错。
long型转换为int的3种方法:
(1)强制
long ll = 300000;
int ii = (int)ll;
(2)调用intValue()方法
long ll = 300000;
int ii= new Long(ll).intValue();
(3)先把long转换成字符串String,然后再转
long ll = 300000;
int ii = Integer.parseInt(String.valueOf(ll));
易错示例:
byte a = 1000; // 编译出错 Type mismatch: cannot convert from int to byte
byte c = 3; // 编译正确
解释:jvm在编译过程中,对于默认为int类型的数值时,当赋给一个比int型数值范围小的数值类型变量(在此统一称为数值类型k,k可以是byte/char/short类型),会进行判断,如果此int型数值超过数值类型k,那么会直接编译出错。但如果此int型数值尚在数值类型k范围内,jvm会自定进行一次隐式类型转换,将此int型数值转换成类型k。
在其他情况下,当将一个数值范围小的类型a赋给一个数值范围大的数值型变量b,jvm在编译过程中将此数值的类型进行了自动提升,如:
int c = 1000;
long d = c;
float e = 1.5F;
double f = e;
但若超过了a类型的最大值,编译出错(10000000000默认是int类型,同时int类型的数值范围是-2^31 ~ 2^31-1):
long a = 10000000000; //编译出错: The literal 10000000000 of type int is out of range
long b = 10000000000L; //编译正确
在数值类型的自动类型提升过程中,数值精度至少不应该降低(整型保持不变,float->double精度将变高)。

二、字符串与其他数据类型转换

2.1 整数转为字符串

1.String s = String.valueOf(i); // 推荐
2.String s = Integer.toString(i);
3.String s = “” + i;
其它数据类型(double\float\long)可以利用同样的方法转换成字符串:
boolean d = true;
String s = Boolean.toString(d);
String s = new Boolean(b).toString();//将b利用对象封装器转化为对象,浪费内存

2.2 字符串转为整数

1.int i = Integer.parseInt(s);
字符串转换成byte, short, int, float, double, long等数据类型,可以分别参考Byte, Short, Integer,Float,Double,Long类的parseXXX方法。
Integer in=new Integer(Integer.parseInt(String s));
char转为整数:
char c = ‘8’;
int re = Integer.parseInt(c + “”);
或:int a = c-‘0’;
2.int i = Integer.valueOf(s).intValue();
Integer integer=Integer.valueOf(s);
Long l = Long.valueOf(s);
(1和2区别:Integer.valueof(String s)是将一个包装类是将一个实际值为数字的变量先转成string型再将它转成Integer型的包装类对象(相当于转成了int的对象)这样转完的对象就具有方法和属性了。而Integer.parseInt(String s)只是将是数字的字符串转成数字,返回的是int型变量不具备方法和属性。)
3.Integer in = new Integer(“123”);

2.3 String与char

1.String转char:
String s = “abc”;
**char c = s.charAt(0);
char[] ca = “123”.toCharArray();**
2.char转String:
char c = ‘2’;
**String s = String.valueOf(c);
String s = c.toString();**//任何类型都可采用toString()转换为String类型

三、object对象与其他的转换

3.1 object对象转换为String

1.Object.toString()
Object object = getObject();
System.out.println(object.toString());
任何严格意义上的java对象都可以调用此方法。但要注意,object不能是null值,否则将抛出NullPointerException异常。
2.类型转换(String)object
使用这种方法时,需要注意的是类型必须能转成String类型。因此最好用instanceof做个类型检查,以判断是否可以转换。否则容易抛出CalssCastException异常。此外,需特别小心的是因定义为Object类型的对象在转成String时语法检查并不会报错,这可能导致潜在的错误存在。这时要格外小心。如:
Object obj = new Integer(100);
String strVal = (String)obj;
在运行时将会出错,因为将Integer类型强制转换为String类型,无法通过。但是
Integer obj = new Integer(100);
String strVal = (String)obj;
如上格式代码,将会报语法错误。
3.String.valueOf(Object)
String.valueOf(Object)的基础是Object.toString()。但它与Objec.toString()又有所不同。在前面方法1的分析中提到,使用1时需保证不为null。但采用方法3时,将不用担心object是否为null值这一问题。为了便于说明问题,我们来分析一下相关的源代码。Jdk里String. valueOf(Object)源码如下:
public static String valueOf(Object obj) {
return (obj == null) ? “null” : obj.toString();
}
隐患:当object为null时,String.valueOf(object)的值是字符串”null”,而不是Null

3.2 object对象转换为int

Integer转换成int为:int num=Integer.intValue();
同理还有byteValue()、shortValue()、longValue()、floatValue()、doubleValue()。

3.2 object对象和HashMap相互转换

示例:
HashMap先转为Object类型,然后再转换为HashMap输出。

        Map<Long,Integer> map = new HashMap<Long,Integer>();
        map.put(1l,1);
        map.put(2l,2);
        Set set1 = map.keySet();
        for (Iterator iter = set1.iterator();iter.hasNext();) {
            Long k = (Long)iter.next();
            System.out.println(k + " " + map.get(k));
        }

        Object o = map;
        System.out.println("object转换为map:");
        if (o instanceof Map) {
            map = (Map)o;
        }
        Set set2 = map.keySet();
        for (Iterator iter = set2.iterator();iter.hasNext();) {
            Long k = (Long)iter.next();
            System.out.println(k + " " + map.get(k));
        }

output:
1 1
2 2
object转换为map:
1 1
2 2

四、进制转换

4.1 十进制到其他进制的转换

1.Integer.toBinaryString(int i);
Integer和Long提供了toBinaryString,toHexString和toOctalString方法,可以方便的将数据转换成二进制、十六进制和八进制字符串。
byte, short, float和double等数据类型,可以利用Integer或者是Long的toBinaryString,toHexString,toOctalString和toString方法转换成其他进制的字符串形式。
2.Integer.toString(int/long i , int radix)
更强大的方法,可以将一个十进制数转换成任意进制的字符串形式。
Integer.toString(30, 16);

4.2 其他进制到十进制的转换

五进制字符串14414转换成十进制整数,结果是1234:
System.out.println(Integer.valueOf(“14414”, 5);
Integer和Long提供的valueOf(String source, int radix)方法,可以将任意进制的字符串转换成十进制数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值