The macros print!, println!, eprint!, eprintln!, write!, writeln! and format! are a special case and implicitly take a reference to any arguments to be formatted.
These macros do not behave as normal functions and macros do for reasons of convenience; the fact that they take references silently is part of that difference.
fn main() {
    let x = 5;
    println!("{}", x);
}
Run it through rustc -Z unstable-options --pretty expanded on the nightly compiler and we can see what println! expands to:
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::v1::*;
#[macro_use]
extern crate std;
fn main() {
    let x = 5;
    {
        ::std::io::_print(::core::fmt::Arguments::new_v1(
            &["", "\n"],
            &match (&x,) {
                (arg0,) => [::core::fmt::ArgumentV1::new(
                    arg0,
                    ::core::fmt::Display::fmt,
                )],
            },
        ));
    };
}
Tidied further, it’s this:
use std::{fmt, io};
fn main() {
    let x = 5;
    io::_print(fmt::Arguments::new_v1(
        &["", "\n"],
        &[fmt::ArgumentV1::new(&x, fmt::Display::fmt)],
        //                     ^^
    ));
}
Note the &x.
If you write println!("{}", &x), you are then dealing with two levels of references; this has the same result because there is an implementation of std::fmt::Display for &T where T implements Display (shown as impl<'a, T> Display for &'a T where T: Display + ?Sized) which just passes it through. You could just as well write &&&&&&&&&&&&&&&&&&&&&&&x.
Early 2023 update:
- Since mid-2021, the required invocation has been - rustc -Zunpretty=expandedrather than- rustc -Zunstable-options --pretty=expanded.
 
- Since 2023-01-28 or so (https://github.com/rust-lang/rust/pull/106745), - format_args!is part of the AST, and so the expansion of- println!("{}", x)is- ::std::io::_print(format_args!("{0}\n", x));, not exposing the- Arguments::new_v1construction and- &xaspects. This is good for various reasons (read #106745’s description), but ruins my clear demonstration here that- xwas only taken by reference. (This is why I’ve added this as a note at the end rather than updating the answer—since it no longer works.)