Java中int与String类型变量的互转
最近在LeetCode看了些算法题,不少地方我用到了基础类型的转换,在这里总结一下常见的类型转换方法。
- int转String
方法一:
public static void main(String[] args) {
int a = 3;
String s = a+"";
System.out.println(s); // console: 3
System.out.println(getType(s)); // console: class java.lang.String
}
public static String getType(Object o){ //获取变量类型方法
return o.getClass().toString(); //使用int类型的getClass()方法
}
方法二:
int a = 3;
String s = String.valueOf(a);
// 打印结果同上
方法三:
int a = 3;
String s = Integer.toString(a);
// 打印结果同上
效率分析:
首先说明三个方法的本质都是调用了convertInt方法,详情去JDK源码看。所以这三种方法的时间效率取决于调用convertInt方法前的操作耗时。
String.valueOf(object)的方法不用担心object是否为null这一问题,JDK中String.valueOf(object)源码:
public static String valueOf(Object obj) {return (obj==null)?"null":obj.toString();}
其本质是通过三元运算符判断转换类型的对象是否为空,还是使用Object类的toString方法完成类型转换,由于三目运算符的效率高于if…else(详情见https://blog.csdn.net/qq_36763419/article/details/91411740),所以该方法的总体效率略高于第三种方法。而第一种方法+""是通过StringBuiler(或者StringBuffer)的append()函数实现的,由于在new StringBuilder()时会耗掉一些时间,所以这个方法是效率最差的。
2. String转int
注:str中可能有不是数字的字符,因此要抛异常
方法一:
Integer.parseInt(str)
代码如下:
String str = "123";
try {
int a = Integer.parseInt(str);
System.out.println(a); // console 123
System.out.println(getType(a)); // console class java.lang.Integer
} catch (NumberFormatException e) {
e.printStackTrace();
}
方法二:
Integer.valueOf(str).intValue();
int a = Integer.valueOf(str).intValue(); //打印输出同上
耗时情况对比:
方法一执行一万次的耗时
方法二执行一万次的耗时
效率分析:让我们看看valueOf方法的源码:
我们可以看到它就是调用parseInt方法来实现类型转换的,后面的参数radix10指转换int型数据的进制数。
方法二后面还调用了intValue()方法
故耗时会高于直接使用parseInt的方法。