public UnsignedLong subtract(long decrement){
  if (getValue() >= 0 && getValue() > decrement)   return valueOf(getValue() - decrement);
  BigInteger bi=bigIntegerValue();
  bi=bi.subtract(BigInteger.valueOf(decrement));
  return new UnsignedLong(bi);
}

public UnsignedLong subtract ( long decrement ) { if ( getValue ( ) >= 0 && getValue ( ) > decrement ) return valueOf ( getValue ( ) - decrement ) ; BigInteger bi = bigIntegerValue ( ) ; bi = bi . subtract ( BigInteger . valueOf ( decrement ) ) ; return new UnsignedLong ( bi ) ; }
subtract a value from this value . note that this object is not changed , but a new one is created .
