Tôi đã gặp phải một lỗi trong codebase của mình, tôi đã thu hẹp lại những gì gây ra hành vi này. Trường hợp thử nghiệm đầu tiên không thành công, trong khi trường hợp cuối cùng thành công.Không được gõ vào Java
@Test
public void testBooleanNull1() {
Boolean nullB = null;
assertFalse(Boolean.valueOf(nullB));
}
@Test
public void testBooleanNull2() {
String nullS = null;
assertFalse(Boolean.valueOf(nullS));
}
@Test
public void testBooleanNull3() {
assertFalse(Boolean.valueOf(null));
}
Tôi biết rằng Boolean.valueOf
là một phương pháp quá tải với hai biến thể một mất một String
và người kia có một nguyên thủy của loại boolean
.
Tôi nghi ngờ rằng điều này xảy ra vì auto-boxing nhưng tôi không chắc chắn nếu đó là trường hợp, hơn nữa tôi không biết tại sao null
đang được chuyển đổi sang một Boolean
như xa như tôi biết null
không phải là một hợp lệ primitive
loại.
Tôi đã chuyển sang sử dụng BooleanUtils
từ Apache Commons
, tôi đã yêu cầu điều này tại đây để hiểu rõ hơn về lý do hành vi theo cách này.
xem thêm http://stackoverflow.com/questions/2707322/what-is-null-in-java – cymatist