【问题标题】:ValueOf(80,8) vs toString(80,8) in JavaJava 中的 ValueOf(80,8) 与 toString(80,8)
【发布时间】:2013-02-04 15:17:12
【问题描述】:

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

首先,为什么Long(或Integer)方法在valueOf方法中需要一个String作为参数?而是在 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.

【问题讨论】:

  • A NumberFormatException 不是编译错误。你说得对,80 不是有效的八进制数。
  • 因为这些方法本质上是相反的?
  • @SeanOwen 是的,我更正了,我粘贴错了
  • 好的,我通过以下测试了解了问题所在: Long l1 = Long.valueOf("70",8);字符串 s1 = Long.toString(70,8); System.out.println(l1+ " "+s1);我看到它实际上以两种不同的方式处理这些信息。现在它是有道理的。不过感谢您的及时答复。

标签: java tostring value-of


【解决方案1】:

考虑到让多个方法做同样的事情没有意义,不同的方法用不同的参数做不同的事情是合乎逻辑的,一点也不奇怪。

首先,为什么Long(或Integer)方法在valueOf方法中需要一个String作为参数?

所以它可以解析字符串并给你一个 LongInteger 作为文档状态。

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

valueOf 将 String 转换为对象,而 toString 获取一个值并将其转换为 String。鉴于这些几乎与您期望的相反。

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

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

【讨论】:

    【解决方案2】:
    1. 这些方法分别从String 表示转换和转换为String 表示。你会期待什么?

    2. 第一行代码调用了一个不采用String 参数的方法。它转换为String,那为什么要输入呢?它的输出

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

    【讨论】:

      【解决方案3】:

      其实这两种方法都是绑定的:

      /** 
       * 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() 需要一个 long 作为第一个参数,请参见上面的代码。

      【讨论】:

        【解决方案4】:

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

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

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

        我建议查看Long.toString(long, int)Long.valueof(String, int) 的JavaDoc。文档很棒,解释得很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-28
          • 2019-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-05
          • 2016-06-06
          • 2011-02-27
          相关资源
          最近更新 更多