¿Cuál es la diferencia entre List.of y Arrays.asList?

Java 9 introdujo nuevos métodos de fábrica para listas,List.of:

List<String> strings = List.of("first", "second");

¿Cuál es la diferencia entre la opción anterior y la nueva? Es decir, cuál es la diferencia entre esto:

Arrays.asList(1, 2, 3);

y esto:

List.of(1, 2, 3);

Respuestas a la pregunta(3)

Su respuesta a la pregunta