Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Boolean Class ใน Java (java.lang.Boolean)

คลาส 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");
    }
}