ABox表示拥有一个类型并在堆上分配它。引用 ( &) 表示您正在从其他东西借用价值。
您甚至可以从 a 获取引用Box(此处不需要显式类型,仅显示清楚):
let boxed: Box<i32> = Box::new(42);
let reference: &i32 = &boxed;
Run Code Online (Sandbox Code Playgroud)
主要区别归结为所有权。当你拥有一个值时,你可以对它做更多的事情,比如销毁它或控制它的可变性。
堆 vs 堆栈也很重要,但不是那么直接。堆栈往往具有相对较小的固定大小(在我的机器上为 8MiB),因此在堆栈上声明大变量可能会导致内存耗尽。堆往往更大,概念上寻址 2^32 或 2^48 字节。
Rust 编程语言有一个关于所有权的部分以及一个关于堆栈和堆的部分;我鼓励你阅读这两本书。