gpt4 book ai didi

Java 基本类型和内存中的对象结构

转载 作者:行者123 更新时间:2023-12-01 19:47:12 24 4
gpt4 key购买 nike

当我们创建 Java 原始变量或 Java 对象时,它在内存中如何表示/构造?

int A;

//是否创建了对整数类型的引用?
//内存中分配的整数类型需要多少内存空间?

A = 3;

//现在是否已经分配了保存整数类型所需的内存空间?然后 A 引用该空间。

int B = 2;
A = B;

//A 是否将内存位置引用为 B ? A 引用的旧内存位置是垃圾收集吗?
//如果是,那么修改 A 也会导致 B 也被修改,对吗?
//如果没有,则已完成值传递。
//A 引用的内存位置是否被修改,或者是否创建了一个能够保存 int 的新内存位置,并用 B 引用的值填充,然后被 A 引用?

如果 A 是一个类对象,是不是同样的类比?

最佳答案

Java 中的原语进入堆栈,因此它们存储在变量的位置。请记住,虽然 String 被认为是不可变的,但它不是基元,而是一个类。

因此变量 A 和 B 都保存值 2,但不共享该值。附带说明的是,Java 对 int 变量做了一些有趣的事情。如果它们足够低,它们实际上甚至不会存储在堆栈中,而是引用内存中的静态分配(预编译器处理该问题)。

现在来说说您是否要分配一个类实例。然后事情发生了一些变化。如果将实例分配给 A,则会在堆栈上分配对 A 的引用并将其分配在堆上。然后,当您将 A 分配给 B 时,两者都会引用堆中的同一实例。在两个引用超出范围之前,不会对该实例进行垃圾回收。

如果您重新分配 A 或 B,它们将不再指向堆中的同一实例。

关于Java 基本类型和内存中的对象结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52746669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com