在Java中,valueOf() 方法是一个常用的工具,用于将基本数据类型和其他对象转换成字符串。
valueOf()是一个静态方法,返回指定类型参数的字符串表示形式。指定类型参数可以是:boolean、char、int、long、float和double。
布尔类型
方法声明
public static String valueOf(boolean b)
返回boolean参数的字符串表示形式。如果参数为true,则返回一个等于”true’的字符串:否则,返回一个等于”false”的字符串。
- 入口参数:b是一个boolean。
- 返回值:一个新分配的字符串,它表示包含在字符数组参数中的相同字符序列。
public static void main(String[] args) {
boolean bool = true;
String str = String.valueOf(bool);
System.out.println(str);
System.out.println(str.equals("true"));
}
下面可以看到结果:
true
虽然控制台显示值相同,但是其中一个是字符串 true,一个是布尔类型 true。
字符类型
方法声明
public static String valueOf(char c)
返回char参数的字符串表示形式。一个长度为1的字符串,它包含参数c的单个字符。
- 入口参数:c是一个char。
- 返回值:一个长度为1的字符串,它包含参数c的单个字符。
public static void main(String[] args) {
System.out.println(String.valueOf('a'));
System.out.println(String.valueOf('1'));
System.out.println(String.valueOf('好'));
}
执行结果如下:
1
好
int 整数类型
方法声明
public static String valueOf(int i)
返回int参数的字符串表示形式。该表示形式恰好是单参数的Integer.toString方法返回的结果。
- 入口参数:i是一个int。
- 返回值:int参数的字符串表示形式。
public static void main(String[] args) {
System.out.println(String.valueOf(1024));
System.out.println(String.valueOf(0));
}
执行结果如下:
0
long 长整数类型
方法声明
public static String valueOf(long l)
返回long参数的字符串表示形式。该表示形式恰好是单参数的Long.toString方法返回的结果。
- 入口参数:l是一个long。
- 返回值:long参数的字符串表示形式。
public static void main(String[] args) {
System.out.println(String.valueOf(10086L));
System.out.println(String.valueOf(9999999L));
}
执行结果如下:
9999999
float 浮点数类型
方法声明
public static String valueOf(float f)
返回float参数的字符串表示形式。该表示形式恰好是单参数的Float.toString方法返回的结果。
- 入口参数:f是一个float。
- 返回值:float参数的字符串表示形式。
double 双精度浮点数类型
方法声明
public static String valueOf(double d)
返回double参数的字符串表示形式。该表示形式恰好是单参数的Double.toString方法返回的结果。
- 入口参数:d是一个double。
- 返回值:double参数的字符串表示形式。
char 字符数组
方法声明
public static String valueOf(char[] data)
返回char数组参数的字符串表示形式。字符数组的内容已被复制,后续修改不会影响新创建的字符串。
- 入口参数:data是一个字符数组。
- 返回值:一个新分配的字符串,它表示包含在字符数组参数中的相同字符序列。
public static void main(String[] args) {
char[] data = {'W', 'o', 'r', 'l', 'd'};
System.out.println(String.valueOf(data));
System.out.println(String.valueOf(data).equals("World"));
}
执行结果如下:
true
方法声明
public static String valueOf(char[]data,int offset,int count)
offset参数是子数组的第一个字符的索引。count参数指定子数组的长度。字符数组的内容已被复制,后续修改不会影响新创建的字符串。
- data:字符数组。
- offset:String值的初始偏移量。
- count:String值的长度。
抛出异常IndexOutOfBoundsException:
- 如果offset为负,count为负;
- 如果offset+count大于data.length。
public static void main(String[] args) {
char[] data = {'W', 'o', 'r', 'l', 'd'};
System.out.println(String.valueOf(data,0,2));
System.out.println(String.valueOf(data,2,2));
System.out.println(String.valueOf(data,3,4));
}
执行结果如下:
rl
Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 7
Object 对象类型
方法声明
public static String valueOf(Object obj)
返回Object参数的字符串表示形式。
- 入口参数:obj是一个对象。
- 返回值:如果参数为null,则字符串等于”null”;否则,返回obj.toString()的值。
public static void main(String[] args) {
BigDecimal big = null;
System.out.println(String.valueOf(big));
System.out.println(String.valueOf(big).equals(null));
System.out.println(String.valueOf(big).equals("null"));
System.out.println(String.valueOf(new BigDecimal("1.2")));
}
执行结果如下:
false
true
1.2
这里使用 BigDecimal 作为对象,空的 BigDecimal 执行过 String.valueOf 方法后是字符串形态的 ‘null’,而不是 Java 中通常被理解的 null。
下面的代码,看似输出是等价的:
public static void main(String[] args) {
BigDecimal big = null;
System.out.println(String.valueOf(big));
System.out.println(String.valueOf(null));
}
执行结果如下:
Exception in thread “main” java.lang.NullPointerException
直接给String.valueOf() 方法传参数 null,这个 null 会被理解为 char[],从而抛出空指针异常。
总结
valueOf()
方法提供了一种简便的方式来将基本数据类型和其他对象转换成字符串。对于基本数据类型,valueOf() 方法直接返回其字符串表示形式。对于字符数组和子字符数组,它创建一个新的字符串,内容与数组中的字符相同。对于对象,如果对象为 null,则返回字符串 “null”;否则,它调用对象的 toString() 方法来获取字符串表示。需要注意的是,直接给 valueOf() 方法传入 null 作为参数会导致异常,因为 null 被视为 char[] 类型,从而引发 NullPointerException。