代码之家  ›  专栏  ›  技术社区  ›  Manuel Selva

Integer.toString(int i)与String.valueOf(int i)

  •  172
  • Manuel Selva  · 技术社区  · 14 年前

    String.valueOf(int i) int 进入之内 String 刚刚发现了 Integer.toString(int i) 方法。

    在查看了这些方法的实现之后,我看到第一个方法正在调用第二个方法。因此我所有的电话 比直接打电话多打一次电话 整数.toString(int i)

    13 回复  |  直到 14 年前
        1
  •  48
  •   mipadi    14 年前

    只是做同一件事的两种不同方式。这可能是一个历史原因(不记得是不是一个先于另一个)。

        2
  •  175
  •   sschuberth    7 年前

    在字符串类型中,我们有几个valueOf方法

    static String   valueOf(boolean b) 
    static String   valueOf(char c) 
    static String   valueOf(char[] data) 
    static String   valueOf(char[] data, int offset, int count) 
    static String   valueOf(double d) 
    static String   valueOf(float f) 
    static String   valueOf(int i) 
    static String   valueOf(long l) 
    static String   valueOf(Object obj) 
    

    像你介绍的每一个具体方法的实现:对于整数,我们有

    Integer.toString(int i)
    

    双倍

    Double.toString(double d)
    

    等等

    在我看来,这不是什么历史事件,但是对于开发人员来说,使用这种方法更有用 valueOf 从String类得到的结果比从正确的类型得到的结果要少,因为这样可以减少我们要做的更改。

    public String doStuff(int num) {
    
      // Do something with num...
    
      return String.valueOf(num);
    
     }
    

    样本2:

    public String doStuff(int num) {
    
     // Do something with num...
    
     return Integer.toString(num);
    
     }
    

    正如我们在示例2中看到的,我们必须做两个更改,与示例1相反。

    在我的结论中,使用 价值

        3
  •  54
  •   Aniruddha A Costa    10 年前

    toString() NullPointerException String.valueOf() 不能检查空值。

        4
  •  13
  •   Kingo    14 年前

    String类为所有基元类型和对象类型提供valueOf方法,因此我假设它们都是方便的方法,都可以通过一个类访问。

    平均intToString=5368ms,平均stringValueOf=5689ms(对于100000000次操作)

    public class StringIntTest {
    
    
        public static long intToString () {
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 100000000; i++) {
                String j = Integer.toString(i);
            }
            long finishTime = System.currentTimeMillis();
    
            return finishTime - startTime;
        }
    
        public static long stringValueOf () {
    
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 100000000; i++) {
                String j = String.valueOf(i);
            }
            long finishTime = System.currentTimeMillis();
    
            return finishTime - startTime;
        }
    
        public static void main(String[] args) {
            long intToStringElapsed = 0;
            long stringValueOfElapsed = 0;
            for (int i = 0; i < 10; i++) {
                intToStringElapsed += intToString();
                stringValueOfElapsed+= stringValueOf();
            }
            System.out.println("Average intToString = "+ (intToStringElapsed /10));
            System.out.println("Average stringValueOf = " +(stringValueOfElapsed / 10));
        }
    }
    
        5
  •  10
  •   Sergey Vyacheslavovich Brunov prodigitalson    3 年前

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

    所以他们给出了完全相同的结果,事实上一个调用另一个。 String.valueOf 如果您以后可以更改类型,则会更灵活。

        6
  •  8
  •   agabrys    7 年前

    如果你看一下 String Integer.toString() 当你打电话的时候 valueOf() .

    话虽如此, 如果方法调用在编译时没有得到优化(可能是这样),可能会快一点。

        7
  •  3
  •   trashgod    14 年前

    实施 String.valueOf() 您看到的是满足API中指定的契约的最简单的方法:“表示就是 Integer.toString()

        8
  •  3
  •   Matthias Wiehl    7 年前

    为了回答OPs的问题,它只是一个有另一个调用的helper包装器,归根结底是样式选择,就是这样。我认为这里有很多错误的信息,Java开发人员能做的最好的事情就是查看每个方法的实现,在任何IDE中只需点击一两次。你会明白的 String.valueOf(int) 只是打电话而已 Integer.toString(int) 为你。

    因此,它们之间的差别是绝对零的,因为它们都创建了一个char缓冲区,遍历数字中的数字,然后将其复制到一个新字符串中并返回它(因此每个都创建了一个String对象)。唯一的区别是一个额外的调用,不管怎样,编译器都会将其消除为一个调用。

        9
  •  2
  •   polygenelubricants    14 年前

    你不应该担心这个额外的通话会给你带来效率问题。如果有任何成本的话,它将是最小的,而且应该是可以忽略不计的。

    也许两者存在的原因是为了提供可读性。在许多类型转换为 String ,然后各种电话 String.valueOf(SomeType) 可能比各种 SomeType.toString 电话。

        10
  •  1
  •   anuragsingh    10 年前

        11
  •  1
  •   Ahamadullah Saikat    7 年前

    Integer.toString(5)和String.valueOf(5)之间没有区别;

    因为String.valueOf返回:

    public static String valueOf(int i) {
        return Integer.toString(i);
    }
    public static String valueOf(float f) {
        return Float.toString(f);
    }
    

    等。。

        12
  •  0
  •   Amit Bhandari    11 年前

    使用唯一的语法String.valueOf()可以将作为参数传递的任何内容转换为String并返回。。

    否则,如果使用Integer.toString()、Float.toString()等(即SomeType.toString()),则必须检查要转换为字符串的参数的数据类型。

    如果您有一个包含不同值的对象类数组,如Integer、Char、Float等,那么通过使用String.valueOf()方法,您可以轻松地将此类数组的元素转换为字符串形式。相反,如果您想使用SomeType.toString(),那么首先您需要了解它们的数据类型类(可能通过使用“instanceOf”操作符),然后只有您可以继续进行类型转换。

    调用时,String.valueOf()方法匹配传递的参数(无论是整数、字符、浮点等),并通过使用方法重载调用参数匹配的“valueOf()”方法,然后在该方法中直接调用对应的“toString()”方法。。

    结论:String.valueOf()方法的重要性是以多调用一次为代价的。

        13
  •  -3
  •   shruti    10 年前

    toString()

    1. 存在于对象类中,通常在派生类中重写
    2. 调用toString()方法需要将类型转换为适当的类。

    值()

    1. 处理基元类型和对象类型。

      Integer a = null;
      System.out.println(Integer.toString()) ; NUll pointer exception
      System.out.println(String.valueOf() ; give NULL as value
      

    检查这个链接它非常好。 http://code4reference.com/2013/06/which-one-is-better-valueof-or-tostring/