Не знаю насколько актуален вопрос, но отвечу.
& и | - побитовые логические операторы.
&& и || - как бы укорочённая версия этих операторов.
Основное различие между между этими видами покажу на сравнении переменных:
(a & b) - будет проверено и a, и b
(a | b) - будет проверено и а, и b
(a && b) - если а=false, то b проверено не будет
(a || b) - если а=true, то b проверено не будет
Рекомендуется использовать двойной вариант, так как это позволяет избежать ошибки при сравнении с null.
Одинарный оператор = используется для присваивания. Когда какой-то переменной или объекту необходимо задать значение.
Двойной оператор == используется для сравнения простых переменных. Для объектов лучше использовать метод equals().