title: :: (double colon) operator in Java 8
body: <p>I was exploring the <strong>Java 8</strong> source and found this particular part of code very surprising:</p>
  <pre><code>// Defined in IntPipeline.java
  @Override
  public final OptionalInt reduce(IntBinaryOperator op) {
      return evaluate(ReduceOps.makeInt(op));
  }
  
  @Override
  public final OptionalInt max() {
      return reduce(Math::max); // This is the gotcha line
  }
  
  // Defined in Math.java
  public static int max(int a, int b) {
      return (a &gt;= b) ? a : b;
  }
  </code></pre>
  <p>Is <code>Math::max</code> something like a method pointer? How does a normal <code>static</code> method get converted to <code>IntBinaryOperator</code>?</p>