This lesson discusses the char
type in Rust, which holds 32 bit unicode values.
They're created using single quotes.
That's interesting. So this is clearly distinct from a string slice &str
, which is created using double quotes. I see that they're separate types. Therefore 'a' != "a"
, which is a bit of a mind-bender.
Could you explain a little more about the difference between them? I recall that a string literal (as an example of a string slice) is a pointer to a hardcoded location within the binary. What's the deal with char
?
So a char
is always 4 bytes in size and therefore differs from the String
or &str
representation.
From the docs:
let v = vec!['h', 'e', 'l', 'l', 'o'];
// five elements times four bytes for each element
assert_eq!(20, v.len() * std::mem::size_of::<char>());
let s = String::from("hello");
// five elements times one byte per element
assert_eq!(5, s.len() * std::mem::size_of::<u8>());
Notice that a list of chars
take up much more memory than a String
of the same content.
I believe it's probably useful to use char
over String
when there's a need to run certain calculations/methods on the given character, as char
's API is quite rich.