Within double quotes, \\n is an escaped (quoted) backslash followed by a n. This is given to printf as \n and printf will output a newline.
Within double quotes (still), \n is the string \n. Again, printf receives a \n string and will print a newline.
Within double quotes, backslash is special only when preceding another backslash, a newline, or any of $, ` or ". "Special" means that it removes the special meaning of the next character. If a backslash precedes any other character (n for example), then it's just a backslash character.
This is explained in the POSIX standard.
To print \n in a printf format string, use printf '\\n' or printf "\\\\n", or use printf '%s' '\n'
In general, the printf format string should be single quoted and any variable data should be given as additional arguments to be inserted into the format string:
printf 'This is how you write a newline: %s\n' '\n'