views:

73

answers:

6

To get a newString value of "99 bottles":

int x = 99;
String fruit = " bottles";

To form a new String I do this:

String newString = "" + x + fruit;

since this is not allowed:

String newString = x + fruit;

But there's something about using the double quotes here that doesn't seem right.

Is there a better way to do this (without using the "" + x)?

A: 

The usage

String newString = "" + x + fruit;

is common enough that people know what you are doing. In some language, you can do

$str = 3 . 'foo';   # in PHP

And in some language, you can do

str = "#{x} foo"   # in Ruby

both of which look more natural.

動靜能量
+4  A: 

One alternative is the String#format() function. Use it as follows:

final String newString = String.format("%d bottles", x);

Another alternative is Integer#toString():

final String newString = Integer.toString(x) + " bottles";
seh
+1  A: 

I tried:

int x = 99;
String fruit = " bottles";
String newString = x + fruit;
System.out.println(newString);

on Eclipse and it does work... but if the above doesn't work for you, String has a valueOf() method:

String newString = String.valueOf(x) + fruit;

However, the "" is actually more common, as 動靜能量 stated.

irrelephant
+1  A: 
String newString = x + fruit;

is allowed in Java.

Another way of doing it is:

String newString = String.format("%d bottles", x);
Richard Fearn
For something as simple as this, `String.format` is overkill. It is both harder to read and significantly more expensive.
Stephen C
+5  A: 

To be clear the following is perfectly legal Java:

    String fruit = ...;
    int n = ...;
    String newString = x + fruit;

The diadic + operator is String concatenation if either the left or right operand expression's type is String; see JLS 15.18.

The following is equivalent in this case:

    String newString = "" + x + fruit;

The initial "" is a common idiom that makes it crystal clear to the reader that string concatenation is involved. (I personally wouldn't use it though, since it looks clunky to me. IMO, it is like adding redundant parentheses to help programmers who don't know the operator Java precedence rules. Icck.)

In the example above, the "" makes no semantic difference. However, there are occasions where the leading "" changes the meaning of the expression. For example:

    int x = 1;
    String fruit = " bananas";
    String newString = x + x + fruit;  // "2 bananas"
    String newString2 = "" + x + x + fruit; // "11 bananas".

(Note that the javac compiler is permitted by the JLS to aggressively optimize a sequence of String concatenations, so the apparent concatenation with "" will be optimized away.)

Stephen C
+2  A: 

Use Integer.toString():

int x = 99;
String fruit = " bottles";
String newString = Integer.toString(x) + fruit;

There is a Float.toString(float val), Double.toString(double val), and Long.toString(long val) as well. Personally, I don't like the use of "" when doing concatenation. I think it's sloppy-ish, for lack of a better word.

gregcase