Doubles.constrainToRange(double,double,double) and Floats.constrainToRange(float,float,float) both cause unnecessary boxing of their arguments. Both call Preconditions.checkArgument(boolean, String, **Object**, **Object**) which causes the boxing.

Can be easily fixed by introducing an overloaded version of checkArgument for floats and doubles. For ints and longs these versions already exist:
Preconditions.checkArgument(boolean, String, **int**, **int**)
Preconditions.checkArgument(boolean, String, **long**, **long**)
which is also why constrainToRange does not have the same problem in the Ints, Shorts & Longs packages.
implements Serializable {
    static final FloatConverter INSTANCE = new FloatConverter();
    @Override
    protected Float doForward(String value) {
      return Float.valueOf(value);
    }
    @Override
    protected String doBackward(Float value) {
      return value.toString();
    }
    @Override
    public String toString() {
      return "Floats.stringConverter()";
    }
    private Object readResolve() {
      return INSTANCE;
    }
    private static final long serialVersionUID = 1;
  }
  /**
   * Returns a serializable converter object that converts between strings and floats using {@link
   * Float#valueOf} and {@link Float#toString()}.
   *
   * @since 16.0
   */
  @Beta
  public static Converter<String, Float> stringConverter() {
    return FloatConverter.INSTANCE;
  }
  /**