gpt4 book ai didi

java - 当我拥有静态最终属性的类集合时,内存中存储了多少个静态最终属性的副本

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

假设我有这个简单的类(class):

public class Car {
public static final int TYPE_SUV = 1;
public static final int TYPE_TRUCK = 2;
public String name;
public int carType;
}

现在,如果我有这些元素的集合,我知道我正在为集合中的每个元素分配一个 String 和一个 int,但我是否也存储静态int 多次?这个人为设计的示例类代表了我几年前编写的 Java 类型,当时我才知道像这样的神奇数字最好使用在单独的类中定义的 enum 来提供,但我一直想知道这段代码的副作用是什么。

最佳答案

来自1.7 JLS :

If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created. A static field, sometimes called a class variable, is incarnated when the class is initialized (§12.4).

A field that is not declared static (sometimes called a non-static field) is called an instance variable. Whenever a new instance of a class is created (§12.5), a new variable associated with that instance is created for every instance variable declared in that class or any of its superclasses.

需要注意的关键点是,内存是按类(而非实例)消耗的,无论您有多少个实例(1 个、1000 个或没有)。

就其值(value)而言:您的 namecarType 实例变量仅在创建实例时分配。更重要的是,在 java 7 之前,可以将相等值的 String 保留在 String 管理的内存中(在 PermGen 中),该实例在使用时引用的单个 String 实例中维护。这改变了 java 1.7当它被移动到主堆并且似乎再次改变时(?) java 8

关于java - 当我拥有静态最终属性的类集合时,内存中存储了多少个静态最终属性的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14984581/

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