This is both very easy and not-so-easy to answer, because it steps on some advanced territory if you look closely. I'll try to leave that out.
So, first, it's not a "statement", it's a type, namely the type of variables (e.g. of the variable
name, or of the unnamed return values of your functions). The fact that there's a
&, but the keyword
mut is missing, tells you that it is a so-called "shared reference". If you know C, it's a bit like a pointer, but here Rust knows it's shared, so it's not unique, so you're guaranteed that nobody changes or removes the thing it's pointing to while you have your reference. That's a pretty strong guarantee and lets you read from it safely at any point.
str part tells you what the reference is pointing to. That's the "a bit advanced" part, so let's just stay on the surface. It means that it points to a sequence of bytes which are valid UTF-8. That is, it's one of the string types of Rust, and you can do "stringly" things with it, e.g. print it. You can't modify it (because you have a shared reference, see above), but you can look at it's chars, compare it with other strings and such.
Finally, if you remember your C, pointers might be invalid, because the thing they're pointing to has been deallocated. That's not true for references in Rust, they are always valid, guaranteed. To uphold that guarantee, Rust needs a notation of "how long is this reference valid?". The
'static part means that the reference is valid for the whole program. Most of the time this means that the byte sequence lives in the static memory of the binary, and has been validated to be UTF-8 at compile time (but that's not strictly always true).