Recently I discovered a strange behaviour difference between if-else and the ternary operator.
I am going to illustrate the difference using unit test code below.
public class SomeTest {
@Test
void testWithTernary_resultIsLong() {
final SomeClass someClass = new SomeClass();
assertTrue(someClass.getNumberWithTernary() instanceof Long);
assertFalse(someClass.getNumberWithTernary() instanceof Integer);
}
@Test
void testWithIfElse_resultIsInteger() {
final SomeClass someClass = new SomeClass();
assertTrue(someClass.getNumberWithIfElse() instanceof Integer);
assertFalse(someClass.getNumberWithIfElse() instanceof Long);
}
private static class SomeClass {
public Object getNumberWithTernary() {
final long l = this.getLong();
return (l >= Integer.MIN_VALUE && l <= Integer.MAX_VALUE) ? Math.toIntExact(l) : l;
}
private long getLong() {
return 10L;
}
public Object getNumberWithIfElse() {
final long l = this.getLong();
if (l >= Integer.MIN_VALUE && l <= Integer.MAX_VALUE) {
return Math.toIntExact(l);
} else {
return l;
}
}
}
}
Both the tests above succeed.
I am using latest version of java 8.
Aucun commentaire:
Enregistrer un commentaire