gpt4 book ai didi

java - 在声明时分配常量的最终成员是否会在运行时优化为 'static final' s?

转载 作者:行者123 更新时间:2023-12-01 22:48:27 25 4
gpt4 key购买 nike

当我在 Java 代码中定义常量值时,我通常将它们声明为“私有(private)静态最终”,但最近我一直在维护将常量定义为“私有(private)最终”的代码。

我目前正在优化,想知道是否将它们“静态”化。

例如

public class X {
private final String SOME_CONST = "Whatever";
}

上面的代码(在运行时)是否与以下代码等效,因此仅保留 1 个“SOME_CONST”副本?

public class X {
private static final String SOME_CONST = "Whatever";
}

我本以为这是相当基本的,但我在任何地方都找不到答案。

[编辑]有些人已经回答了 String 实例被拘留的问题。抱歉,我应该选择一个更好的例子,在我正在考虑的情况下,它不仅仅是字符串,而是很多不同的类型(一些标准的,一些用户定义的)。

我对“私有(private)最终”与“私有(private)静态最终”声明的效果更感兴趣。

最佳答案

SOME_CONST声明为非静态时,虚拟机将创建一个String实例,其内容为“Whatever”。但是,X 类的所有实例都将包含对此 String 对象的引用。因此,String 只有一个实例,但有许多对它的引用。

可能值得将该字段设为静态,以避免不必要的引用。

关于java - 在声明时分配常量的最终成员是否会在运行时优化为 'static final' s?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1239627/

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