Оператор двоеточия (::) java, какой принцип работы?
Прежде всего, квадраточие - это оператор, а не функция. Поэтому никаких аргументов он не принимает. У него есть левая часть выражения и правая часть выражения, как у оператора точка, например. Оператор точка позволяет получить значение поля, указанного в правой части выражения, класса, указанного в левой - SomeClass.someField Так же и квадроточие позволяет получить ссылку на метод, указанный в правой части, класса, указанного в левой.
Компилятор выводит тип ссылки из контекста и приводит её к соответствующему функциональному интерфейсу. В частности метод forEach принимает Consumer<? super T>, к нему и будет приведена ссылка на метод println, возвращаемая выражением System.out::println
На уровне виртуальной машины, как ссылки на методы, так и лямбды - это создаваемые в рантайме прокси-классы. Пример их генерации и композиции вы можете увидеть здесь.
Это ссылка на метод. Ссылку можно получить на метод с любым количеством параметров.
Но подставить ее можно только туда, где она подойдёт по типу.