Java中String.value0f和Character.toString的不同行为

Java中String.value0f和Character.toString的不同行为,java,string,type-conversion,Java,String,Type Conversion,在下面的示例中,此程序段不会编译,但是如果我们将方法Character.toString(char)替换为String.valueOf(char),则一切正常。为什么Character.toString出现在这里的问题是什么?在文档中,这些方法似乎具有相同的行为。谢谢你的解释 public static void main (String args[]) { String source = "19/03/2016 16:34"; String result = Character.to

在下面的示例中,此程序段不会编译,但是如果我们将方法
Character.toString(char)
替换为
String.valueOf(char)
,则一切正常。为什么Character.toString出现在这里的问题是什么?在文档中,这些方法似乎具有相同的行为。谢谢你的解释

 public static void main (String args[]) {

 String source = "19/03/2016 16:34";

 String result = Character.toString(source.substring(1,3));
 System.out.print(result);

}
Character.toString(char c)
方法接受
char
值作为参数,并传递一个
String
类实例,该类实例由
源.substring(1,3)
方法生成
String
char
是不兼容的类型,因此编译器无法创建正确的方法调用并传递值

您的代码应重写为:

public static void main (String args[]) {
    String source = "19/03/2016 16:34";
    String result = source.substring(1, 3);
    System.out.print(result);
    //equivalent to the previous System.out.println call
    System.out.print(source.substring(1, 3));
}

还要注意,第一个
子字符串
参数是一个包含的开始索引,第二个是独占的结束索引,Java字符串中的前导索引是0(而不是1),与数组中的索引完全相同(这不是一个巧合-字符串字符存储在字符数组中)。因此,如果您想获得一个“19”字符串,您应该编写
源代码.substring(0,2)

编译器错误消息说什么?无论如何,
source.substring(1,3)
提供了一个
字符串
,而
Character.toString()需要一个
字符
,并且不接受
字符串

String.valueOf(source.substring(1,3))
将调用
String.valueOf(Object)
,而不是
String.valueOf(char)

您可以获得相同的甚至更简单的结果:

String result = source.substring(1,3);

我不明白<代码>字符。toString(…)
采用
char
。您正在给出一个
字符串
。您期望得到什么?source.substring(1,3)的结果是两个字符的字符串
“9/”
。您希望Character.toString()如何处理它?对字符串调用
String.valueOf()
,没有任何作用;它已经是一个字符串了。也许你应该阅读@oukios
source.substring(1,3)
的javadoc返回一个字符串。你可以不需要指定字符串方法。谢谢你的回复,一切都很清楚。欢迎!别忘了将我的答案标记为已接受,以结束一个问题:)