I\'d like know why the following program throws a NPE
public static void main(String[] args) {
Integer testInteger = null;
String test = \"test\" + t
I believe you need to add the parenthesis. Here is a working example which produces "http://localhost:8080/catalog/rest"
public static String getServiceBaseURL(String protocol, int port, String hostUrl, String baseUrl) {
return protocol + "://" + hostUrl + ((port == 80 || port == 443) ? "" : ":" + port) + baseUrl;
}
This is an example of the importance of understanding operator precedence.
You need the parentheses otherwise it is interpreted as follows:
String test = ("test" + testInteger) == null ? "(null)" : testInteger.toString();
See here for a list of operators and their precedence. Also note the warning at the top of that page:
Note: Use explicit parentheses when there is even the possibility of confusion.
Without the brackets it's doing this effectively:
String test = ("test" + testInteger) == null ? "(null)" : testInteger.toString();
Which results in an NPE.
Because it's evaluated as "test" + testInteger
(which is "testnull"
, and therefore NOT null), meaning your testInteger == null
test will never return true.