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()
,没有任何作用;它已经是一个字符串了。也许你应该阅读@oukiossource.substring(1,3)
的javadoc返回一个字符串。你可以不需要指定字符串方法。谢谢你的回复,一切都很清楚。欢迎!别忘了将我的答案标记为已接受,以结束一个问题:)