คลาส Boolean เป็น wrapper class สำหรับ primitive type boolean ห่อหุ้มค่า true/false ในออบเจ็กต์
Fields (Constants)
| Field |
Type |
คำอธิบาย |
FALSE |
static Boolean |
Boolean object สำหรับค่า false (singleton) |
TRUE |
static Boolean |
Boolean object สำหรับค่า true (singleton) |
TYPE |
static Class<Boolean> |
Class object สำหรับ primitive boolean (boolean.class) |
Constructor (Deprecated since Java 9)
// Deprecated - ใช้ valueOf() แทน
Boolean(boolean value)
Boolean(String s) // "true" (case-insensitive) -> TRUE, อื่นๆ -> FALSE
Instance Methods
| ลำดับ |
เมธอด |
คำอธิบาย |
| 1 |
boolean booleanValue() |
คืนค่า primitive boolean |
| 2 |
int compareTo(Boolean b) |
เปรียบเทียบ: false < true (false=0, true=1) |
| 3 |
boolean equals(Object obj) |
true ถ้า obj เป็น Boolean และมีค่าเท่ากัน |
| 4 |
int hashCode() |
คืน hash code: 1231 (true), 1237 (false) |
| 5 |
String toString() |
คืน "true" หรือ "false" |
Static Methods
| เมธอด |
คำอธิบาย |
static boolean getBoolean(String name) |
อ่าน system property: true ถ้า property ชื่อ name มีค่า "true" (case-insensitive) |
static boolean parseBoolean(String s) |
Parse string: true ถ้า s.equalsIgnoreCase("true"), มิฉะนั้น false |
static Boolean valueOf(boolean b) |
คืน Boolean.TRUE หรือ Boolean.FALSE (singleton, ไม่สร้าง object ใหม่) |
static Boolean valueOf(String s) |
Parse string คืน Boolean object (cached TRUE/FALSE) |
static String toString(boolean b) |
Static method แปลง primitive boolean → String |
static int compare(boolean x, boolean y) |
เปรียบเทียบ primitive booleans (Java 7+) |
static boolean logicalAnd(boolean a, boolean b) |
Logical AND (Java 8+) |
static boolean logicalOr(boolean a, boolean b) |
Logical OR (Java 8+) |
static boolean logicalXor(boolean a, boolean b) |
Logical XOR (Java 8+) |
ตัวอย่างที่ 1: equals และ hashCode
import java.lang.*;
public class Demo {
public static void main(String[] args) {
Boolean val1, val2;
val1 = new Boolean(true);
val2 = new Boolean(true);
boolean res = val1.equals(val2);
System.out.println("Are both the Boolean values equal? = " + res); // true
// hashCode
System.out.println("HashCode true: " + Boolean.TRUE.hashCode()); // 1231
System.out.println("HashCode false: " + Boolean.FALSE.hashCode()); // 1237
}
}
Output
Are both the Boolean values equal? = true
HashCode true: 1231
HashCode false: 1237
ตัวอย่างที่ 2: ค่าต่างกัน และ getBoolean/parseBoolean
import java.lang.*;
public class Demo {
public static void main(String[] args) {
Boolean val1 = new Boolean(false);
Boolean val2 = new Boolean(true);
System.out.println("Value1 = " + val1); // false
System.out.println("Value2 = " + val2); // true
System.out.println("HashCode Value1 = " + val1.hashCode()); // 1237
System.out.println("HashCode Value2 = " + val2.hashCode()); // 1231
boolean res = val1.equals(val2);
System.out.println("Are both equal? = " + res); // false
// parseBoolean
System.out.println("parseBoolean('true'): " + Boolean.parseBoolean("true")); // true
System.out.println("parseBoolean('True'): " + Boolean.parseBoolean("True")); // true
System.out.println("parseBoolean('FALSE'): " + Boolean.parseBoolean("FALSE")); // false
System.out.println("parseBoolean('yes'): " + Boolean.parseBoolean("yes")); // false
System.out.println("parseBoolean('1'): " + Boolean.parseBoolean("1")); // false
// getBoolean (system property)
System.setProperty("myapp.debug", "true");
System.out.println("getBoolean('myapp.debug'): " + Boolean.getBoolean("myapp.debug")); // true
System.out.println("getBoolean('nonexistent'): " + Boolean.getBoolean("nonexistent")); // false
// valueOf (preferred)
Boolean b1 = Boolean.valueOf(true); // Boolean.TRUE
Boolean b2 = Boolean.valueOf("false"); // Boolean.FALSE
System.out.println("valueOf(true) == TRUE: " + (b1 == Boolean.TRUE)); // true
}
}
Output
Value1 = false
Value2 = true
HashCode Value1 = 1237
HashCode Value2 = 1231
Are both equal? = false
parseBoolean('true'): true
parseBoolean('True'): true
parseBoolean('FALSE'): false
parseBoolean('yes'): false
parseBoolean('1'): false
getBoolean('myapp.debug'): true
getBoolean('nonexistent'): false
valueOf(true) == TRUE: true
Boolean vs boolean - เมื่อไหร่ใช้ตัวไหน?
| สถานการณ์ |
แนะนำ |
| Local variables, calculations, conditions, arrays |
boolean (primitive) - เร็วกว่า, ไม่มี null |
| Collections: List<Boolean>, Map<K, Boolean> |
Boolean (wrapper) - generic ต้องการ object |
| Nullable boolean (สามารถเป็น null ได้) |
Boolean |
| Reflection, Serialization, JSON |
Boolean |
| Method parameters ที่ optional |
Boolean (null = not specified) |
Best Practices
- ใช้
Boolean.valueOf(...) แทน new Boolean(...) (cached singletons)
- หลีกเลี่ยง
new Boolean(String) - พฤติกรรมสับสน ("false" string -> Boolean.FALSE แต่ "anything" -> Boolean.FALSE)
- ใช้
parseBoolean สำหรับ parse string โดยไม่สร้าง object
- ใช้
getBoolean สำหรับอ่าน system properties/configuration flags
- Autoboxing/unboxing ทำงานอัตโนมัติ แต่ระวัง NullPointerException เมื่อ unbox null Boolean
Null Safety Example
public class BooleanNullSafety {
public static void main(String[] args) {
Boolean boxed = null;
// boolean primitive = boxed; // NullPointerException!
// Safe ways:
boolean safe1 = Boolean.TRUE.equals(boxed); // false (null-safe)
boolean safe2 = boxed != null && boxed; // false (short-circuit)
boolean safe3 = Boolean.valueOf("false").booleanValue(); // false
System.out.println("Safe checks work without NPE");
}
}