if ((x == new Bit(1) && y == new Bit(1)) || (x == new Bit(0) && y == new Bit(0)))
ich vermute, Du wolltest damit die beiden möglichen Zustände abbilden, die ein bool annehmen kann und als Schnellzugriff bereithalten.
Sowas macht man mit static const privaten (oder selten public) members.
private static const Bit.TRUE = new Bit(1);
private static const Bit.FALSE = new Bit(0);
Diese kannst Du dann in Deinen eigenen Klassen verwenden, indem Du aber IMMER (und deshalb ist das hier in diesem Fall eine gefährliche Alternative) diese Konstanten benutzt. Denn Du vergleichst wie bereits gesagt Referenzen.
Wie auch bereits gesagt ist in Deinem Fall ist equals() auf alle Fälle besser.
if(n == 0) {
this.b = false;
} else {
this.b = true;
}
schreibt man auch einfach als
this.b = ( n != 0 );