Search code examples
javastringstring-concatenation

Java String Concatenation giving output as 2 equals 11 on concat 1+1+"equals"+1+1


I wrote code in java and got output as 2 equals 11.My code is

public class StringPrct 
{
public static void main(String[]args)
{
String s= 1+1+" equals "+1 +1;
System.out.println(s);
}
}

Now the question is why i am not getting output as 2 equals 2.


Solution

  • The + operator has the same precedence whether it's addition or concatenation, and associates left-to-right. So:

    1 + 1 + " equals " + 1 + 1
    

    evaluates as

    (((1 + 1) + " equals ") + 1) + 1
    ((2 + " equals ") + 1) + 1
    ("2 equals " + 1) + 1
    "2 equals 1" + 1
    "2 equals 11"
    

    If you want to override this, you need to provide parentheses:

    1 + 1 + " equals " + (1 + 1)
    

    This becomes:

    ((1 + 1) + " equals ") + (1 + 1)
    (2 + " equals ") + (1 + 1)
    "2 equals " + (1 + 1)
    "2 equals " + 2
    "2 equals 2"
    

    For clarity, you should probably add the parentheses to the first 1 + 1 as well, so that someone reading your code doesn't have to do the mental exercise of adding parentheses and evaluating down:

    (1 + 1) + " equals " + (1 + 1)