Integer.toString calls the static approach in the class Integer. It doesn't require an occurrence of Integer.
If you call a new Integer(i) you construct an instance of type Integer, which is a complete Java object encapsulating the value of your int. Then you call the toString process on it to direct it to declare a string image of itself.
If all you require is to print an int, you'd apply the first one because it's lighter, faster and doesn't use extra memory (apart from the passed string).
If you need an object expressing an integer value—to put it inside a collection for example—you'd use the second one, as it gives you a full-fledged object to do all kinds of things that you can't do with a bare int.