Java int to String - Integer.toString(i) vs new Integer(i).toString()

JavaStringInt

Java Problem Overview


Sometimes java puzzles me.
I have a huge amount of int initializations to make.

What's the real difference?

  1. Integer.toString(i)
  2. new Integer(i).toString()

Java Solutions


Solution 1 - Java

Integer.toString calls the static method in the class Integer. It does not need an instance of Integer.

If you call new Integer(i) you create an instance of type Integer, which is a full Java object encapsulating the value of your int. Then you call the toString method on it to ask it to return a string representation of itself.

If all you want is to print an int, you'd use the first one because it's lighter, faster and doesn't use extra memory (aside from the returned string).

If you want an object representing an integer value—to put it inside a collection for example—you'd use the second one, since it gives you a full-fledged object to do all sort of things that you cannot do with a bare int.

Solution 2 - Java

new Integer(i).toString() first creates a (redundant) wrapper object around i (which itself may be a wrapper object Integer).

Integer.toString(i) is preferred because it doesn't create any unnecessary objects.

Solution 3 - Java

Another option is the static String.valueOf method.

String.valueOf(i)

It feels slightly more right than Integer.toString(i) to me. When the type of i changes, for example from int to double, the code will stay correct.

Solution 4 - Java

  1. new Integer(i).toString();

    This statement creates the object of the Integer and then call its methods toString(i) to return the String representation of Integer's value.

  2. Integer.toString(i);

    It returns the String object representing the specific int (integer), but here toString(int) is a static method.

Summary is in first case it returns the objects string representation, where as in second case it returns the string representation of integer.

Solution 5 - Java

I also highly recommend using

int integer = 42;
String string = integer + "";

Simple and effective.

Solution 6 - Java

Although I like fhucho's recommendation of

String.valueOf(i)

The irony is that this method actually calls

Integer.toString(i)

Thus, use String.valueOf(i) if you like how it reads and you don't need radix, but also knowing that it is less efficient than Integer.toString(i).

Solution 7 - Java

In terms of performance measurement, if you are considering the time performance then the Integer.toString(i); is expensive if you are calling less than 100 million times. Else if it is more than 100 million calls then the new Integer(10).toString() will perform better.

Below is the code through u can try to measure the performance,

public static void main(String args[]) {
            int MAX_ITERATION = 10000000;
		long starttime = System.currentTimeMillis();
		for (int i = 0; i < MAX_ITERATION; ++i) {
			String s = Integer.toString(10);
		}
		long endtime = System.currentTimeMillis();
		System.out.println("diff1: " + (endtime-starttime));
		
		starttime = System.currentTimeMillis();
		for (int i = 0; i < MAX_ITERATION; ++i) {
			String s1 = new Integer(10).toString();
		}
		endtime = System.currentTimeMillis();
		System.out.println("diff2: " + (endtime-starttime));
	}

In terms of memory, the

> new Integer(i).toString();

will take more memory as it will create the object each time, so memory fragmentation will happen.

Solution 8 - Java

Better:

Integer.valueOf(i).toString()

Solution 9 - Java

Simple way is just concatenate "" with integer:

int i = 100;

String s = "" + i;

now s will have 100 as string value.

Solution 10 - Java

Here Integer.toString calls the static method in the class Integer. It does not require the object to call.

If you call new Integer(i) you first create an instance of type Integer, which is a full Java object encapsulating the value of your int i. Then you call the toString method on it to ask it to return a string representation of itself.

Solution 11 - Java

1.Integer.toString(i)

Integer i = new Integer(8);
    // returns a string representation of the specified integer with radix 8
 String retval = i.toString(516, 8);
System.out.println("Value = " + retval);

2.new Integer(i).toString()

 int i = 506;

String str = new Integer(i).toString();
System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class java.lang.String

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmarcolopesView Question on Stackoverflow
Solution 1 - JavaJeanView Answer on Stackoverflow
Solution 2 - JavaoksaytView Answer on Stackoverflow
Solution 3 - JavafhuchoView Answer on Stackoverflow
Solution 4 - JavaDhirajView Answer on Stackoverflow
Solution 5 - JavaJasper HoltonView Answer on Stackoverflow
Solution 6 - JavaNathan WaiteView Answer on Stackoverflow
Solution 7 - JavaDhirajView Answer on Stackoverflow
Solution 8 - JavaryuView Answer on Stackoverflow
Solution 9 - JavaShiv BuyyaView Answer on Stackoverflow
Solution 10 - JavaShailej ShimpiView Answer on Stackoverflow
Solution 11 - JavaShivanandamView Answer on Stackoverflow