What is the difference between owned and borrowed types in Rust

Owned types manage their own memory and data, while borrowed types reference data owned by another variable without taking responsibility for it.

Owned types hold the data directly and are responsible for freeing it, while borrowed types hold a reference to data owned by someone else. Owned types like String or Vec<T> manage their own memory, whereas borrowed types like &str or &Vec<T> point to existing data without taking ownership.

fn main() {
    let owned = String::from("hello");
    let borrowed: &str = &owned;
    println!("{owned}, {borrowed}");
}