String.valueof和Integer.toString的不同-JAVA成长之路

Integer.toString()方法

作用:该方法返回指定整数的有符号位的String对象,以10进制字符串形式返回。

内部实现:

public static String toString(int i) {

if (i == Integer.MIN_VALUE) //等于最小值直接返回最小值字符串,避免getChars方法遇到最小值发生错误

//判断i的位数,若位负数增加1位用来保存符号位

int size = (i

char[] buf = new char[size];

//将i转换位buf符号数组

getChars(i, size, buf);

//因为buf数组是在方法内部生成,其他地方不会有其引用,所以直接将其引用给String内部的value保存,用来初始化String

return new String(buf, true);

}

可以看出Integer.toString()方法用来执行将int转换为String的操作,那么根据方法复用的原则,可以推断出String.toString(int)也应该是使用来该方法。那么我们接着往下看。

String.valueof()方法

不同于Integer.toString(int),valueof有大量的重载方法,我们一一对其介绍。

public static String valueOf(Object obj)

作用:将对象转换成String类型

源码:

public static String valueOf(Object obj) {

return (obj == null) ? "null" : obj.toString();

}

可以看出这里调用对象的toString(),所以写对象时,最好重写其toString()方法。

public static String valueOf(char data[])

作用:将字符数组转换成String类型

源码:

public static String valueOf(char data[]) {

return new String(data);

}

直接将字符数组作为String的构造参数入参,内部是将数组复制了一份保存在了String中,用来初始化String。

public static String valueOf(char data[], int offset, int count)

作用:将offset位置至offset+count位置的data[]数组转换成String类型

源码:

public static String valueOf(char data[], int offset, int count) {

return new String(data, offset, count);

}

public static String valueOf(boolean b)

作用:将布尔转换成String类型

源码:

public static String valueOf(boolean b) {

return b ? "true" : "false";

}

可以看出并不能直接从boolean转换成字符,而是判断后,返回指定的字符串。

public static String valueOf(char c)

作用:将字符转换成String类型

源码:

public static String valueOf(char c) {

char data[] = ;

return new String(data, true);

}

这里先将字符转换成字符数组,可能好奇String(data,true)这个构造方法与上面的String(data)有什么不同,String(data, true)构造方法将引用传递给了String内部的value用来创建字符串,data在方法内部创建没有其他引用,所以可以直接传递,节约内存空间。

public static String valueOf(int i)

作用:将int类型转换成String类型

源码:

public static String valueOf(int i) {

return Integer.toString(i);

}

与我们的推测相似,这里调用了Integer.toString()的方法,可以看出String的valueof方法是将各种类型转换成String,内部重载了不同类型转String的处理,所以推荐使用valueof方法。

public static String valueOf(long l)

作用:将long类型转换成String类型

源码:

public static String valueOf(long l) {

return Long.toString(l);

}

public static String valueOf(float f)

作用:将float类型转换成String类型

源码:

public static String valueOf(float f) {

return Float.toString(f);

}

public static String valueOf(double d)

作用:将double类型转换成String类型

源码:

public static String valueOf(double d) {

return Double.toString(d);

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200503A0997X00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券