数字与字符串相转换
平时开发的时候经常会遇到需要将字符串转成数字或者数字转换成字符串的情况,这个知识点比较简单,所以大概的记录一下。
数字转字符串
数字转字符串主要有两个方法,直接调用valueof以及包装后调用toString的方法。
//调用valueOf这个方法,接收一个数字类型作为参数
//返回一个str。
int i = 5;
String str = String.valueOf(i);
System.out.println(str);
//这种方式先进行了装箱,再调用toString的方法
//返回一个str对象。
Integer it = i;
String str2 = it.toString();
System.out.println(str2);
字符串转数字
字符串转数字使用的是基本类类型的parseInt方法,查看源码可以,这个方法接收一个String对象,返回对象所表示的数字。
//调用类类型的parseInt方法转换成数字
String str3 = "123";
int ans = Integer.parseInt(str3);
System.out.println(ans);
valueOf和parseInt的区别
在字符串转数字中,valueOf与parseInt都是接收一个String对象,转成相应的数字,那这两个方法有什么区别呢?
查看源码:
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
从源码角度比较分析,可以发现这两个方法虽然都会得到int数据,但是过程是不一样的,valueOf返回的是一个Integer对象,在最后的赋值中会发生自动拆箱的操作。而parseInt则直接返回int数值,无需拆箱。所以一般在字符串转数字中,尽量使用parseInt。
字符串的一些问题
字符串是最频繁的交互方式,对于它的一些问题也需要搞清楚。
字符串是否相同?
字符串相同有两种理解,第一个是字符串字面值相同,第二是为同一个对象。
String str4 = "hello";
String str5 = new String("hello");
String str6 = "hello";
对于上面三个字符串而言,使用字面值方式定义的字符串,被放在字符串常量池中,后续的任何创建,都会先在池中检索是否已经存在该字面值对象,如果存在,则直接返回已有的字面值引用。所以str4和str6是相等的。
而str5使用了创建对象的方式,这种方式会首先在常量池中查找是否有这个字符串,存在,则直接返回字符串的引用。之后又有new,则会在堆上创建对象,并赋给str6引用。因此,会出现一行代码创建了两个对象。
常量池里是对象还是对象的引用?答案是对象的引用。记住,Java的对象都创建在堆上。
String、StringBuilder、StringBuffer
内容较多,这一部分放在了这个博客中