Java中的ValueOf(80,8)vs toString(80,8)

时间:2013-02-04 15:17:13

标签: java tostring value-of

我有几个与这些包装类的方法有关的问题。

首先,为什么Long(或Integer)方法将String作为valueOf方法中的参数?而是在toString方法中采用数字原语? (见下面的例子)

其次,为什么下面列出的第二行代码不起作用(通过将String作为第一个参数),而第一行工作正常(通过将long(或int)作为第一个参数)。

两个方法都应该分别以String和Long类型返回在第二个参数中指定的基数中转换的第一个参数中所述值的值(在本例中为8)。

String s = Long.toString(80,8)// takes a numeric primitive and it works fine.

Long l = Long.valueOf("80",8)// takes a string as first argument it does not compile,
                              //(as it was because in radix 8 cannot "read" the number 8
                              // and therefore it prompts an NumberFormatException.

4 个答案:

答案 0 :(得分:4)

如果让多个方法做同样的事情没有意义,那么不同的方法用不同的参数做不同的事情是合乎逻辑的,并不奇怪。

  

首先,为什么Long(或Integer)方法将String作为valueOf方法中的参数?

因此,它可以解析字符串并为您提供LongInteger作为docuemntation状态。

  

而是在toString方法中使用数字原语?

valueOf将String转换为对象,toString获取值并将其转换为String。鉴于这些几乎完全相反的事情,你会期望它们反过来。

  

其次,为什么下面列出的第一行代码不起作用(通过将String作为第一个参数),而第二行工作正常(通过将long(或int)作为第一个参数)。

80是一个有效的小数,可以转换为八进制数。 80不是有效的八进制(或二进制),因此您无法将其解析为八进制。

答案 1 :(得分:3)

  1. 这些方法分别从String表示转换为String表示。你会期待什么?

  2. 第一行代码调用不带String参数的方法。它转换为{{1}},为什么会输入?它的输出

  3. “80”不是有效的八进制数。 8不是八进制数字。值8为“10”。

答案 2 :(得分:1)

实际上两种方法都是绑定的:

/** 
 * Returns the string representation of the <code>long</code> argument. 
 * <p> 
 * The representation is exactly the one returned by the 
 * <code>Long.toString</code> method of one argument. 
 * 
 * @param   l   a <code>long</code>. 
 * @return  a string representation of the <code>long</code> argument. 
 * @see     java.lang.Long#toString(long) 
 */ 
public static String valueOf(long l) { 
    return Long.toString(l, 10); 
}

似乎Long.toString()需要很长时间作为第一个参数,请参阅上面的代码。

答案 3 :(得分:1)

Long.valueOf(String, int)将字符串转换为Long

Long.toString(long. int)long转换为字符串。

两个函数都采用用于转换的基数。

我建议您查看Long.toString(long, int)Long.valueof(String, int)的JavaDoc。文档非常好,并且解释得非常好。