Data Type Java

//package com.myapp.util.security.crypt;
/**
 * immutable.
 * false == 0, true == 1
 * @author andre
 */
final class Bit {
    
    private static int creationCounter = 0;
    private static final String TRUE = "1";
    private static final String FALSE = "0";
    /**this flag contains all data needed*/
    final boolean val;
    Bit(boolean value) {
        this.val = value;
//        creationCounter++; // for benchmarking...
    }
    Bit xor(Bit other)  {return new Bit((val && (!other.val)) || ((!val) && other.val));}
    Bit and(Bit other)  {return new Bit(val && other.val);}
    Bit or(Bit other)   {return new Bit(val || other.val);}
    Bit not()           {return new Bit(!val);}
    Bit nand(Bit other) {return new Bit(!(val && other.val));}
    Bit nor(Bit other)  {return new Bit(!(val || other.val));}
    @Override public String toString()        {return val ? TRUE : FALSE;}
    @Override public boolean equals(Object o) {return ((Bit) o).val == val;}
    @Override public int hashCode()           {return val ? 1 : 0;}
    public static int getCreationCounter() {
        return creationCounter;
    }
    public static void setCreationCounter(int creationCounter) {
        Bit.creationCounter = creationCounter;
    }
}