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
.
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)