在以下示例中,此程序代码段无法编译,但如果我们将方法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);
}
答案 0 :(得分:4)
Character.toString(char c)
方法接受char
值作为参数,并且您传递的是从String
方法生成的source.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));
}
另请注意,第一个substring
参数是包含开始索引,第二个是独占结束索引,Java String中的前导索引为0 (不是1)与数组完全一样(这不是巧合 - 字符串字符存储在char数组中)。因此,如果你想获得一个“19”字符串,你应该写source.substring(0, 2)
答案 1 :(得分:1)
编译器错误消息说什么?无论如何,source.substring(1,3)
为您提供String
而Character.toString()
需要char
且不接受String
。
String.valueOf(source.substring(1,3))
会拨打String.valueOf(Object)
,而不是String.valueOf(char)
。
您可以获得更简单的信息:
String result = source.substring(1,3);