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

时间:2016-03-19 16:33:31

标签: 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.toString(source.substring(1,3));
 System.out.print(result);

}

2 个答案:

答案 0 :(得分:4)

Character.toString(char c)方法接受char值作为参数,并且您传递的是从String方法生成的source.substring(1,3)类实例。 Stringchar是不兼容的类型,因此编译器无法创建正确的方法调用并传递值

您的代码应重写为:

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));
}

另请注意,第一个substring参数是包含开始索引,第二个是独占结束索引,Java String中的前导索引为0 (不是1)与数组完全一样(这不是巧合 - 字符串字符存储在char数组中)。因此,如果你想获得一个“19”字符串,你应该写source.substring(0, 2)

答案 1 :(得分:1)

编译器错误消息说什么?无论如何,source.substring(1,3)为您提供StringCharacter.toString()需要char且不接受String

String.valueOf(source.substring(1,3))会拨打String.valueOf(Object),而不是String.valueOf(char)

您可以获得更简单的信息:

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