当前位置: 首页 > 面试题库 >

如果未在代码中进行修改,我应该声明一个Java字段“ final”吗?

施阳曜
2023-03-14
问题内容

我的问题主要是关于性能。编译器更好地了解,例如,对象实例化后未修改某些变量。那么,为什么还要打入决赛呢?

我认为这里可能会出现许多结构/逻辑原因,但从性能角度来讲?有关系吗?

谢谢,


问题答案:

现代 JVM中,final 不应
影响性能。这对于私有字段尤其如此,但是即使对于非私有字段,JIT仍可以将非最终字段视为最终字段,从而对其进行优化,然后,如果它加载了一些确实修改了该字段的代码,则可以取消优化。

也就是说,使用final的主要原因不是性能,而是使代码更易于维护。通过使字段成为最终字段,您减少了代码读者必须考虑的“活动部分”的数量,从而使推理代码变得更加容易。



 类似资料:
  • 我有一个关于Java中字符串的简单问题。下面的简单代码段只是将两个字符串连接起来,然后将它们与进行比较。 比较表达式返回非常明显(我理解和之间的区别)。 当这两个字符串声明为时, 比较表达式在本例中返回。为什么会起作用?是不是一定要用实习生的钱呢?还是我被误导了?

  • 问题内容: 默认情况下,Python 3对源代码文件使用UTF-8编码。我仍应在每个源文件的开头使用编码声明吗?喜欢 问题答案: 因为默认 值为 UTF-8,所以仅在偏离默认值时或者在依赖其他工具(例如IDE或文本编辑器)来使用该信息时,才需要使用该声明。 换句话说, 就Python而言 ,仅当您要使用不同的编码时,才需要使用该声明。 其他工具(例如您的编辑器)也可以支持类似的语法,这就是PEP

  • 问题内容: 杰克逊图书馆的班级似乎是线程安全的。 这是否意味着我应该像这样将我声明为静态字段? 而不是像这样的实例级字段? 问题答案: 是的,建议您这样做是安全的。 您所引用页面的唯一警告是,共享器一旦被共享便无法修改。但您不更改配置,这样就可以了。如果确实需要更改配置,则可以从静态块执行此操作,也可以。 编辑 :(2013/10) 在2.0及更高版本中,可以通过注意到还有一种更好的方法来增强上述

  • 问题内容: 如果我在一个类中有以下声明,其中是抽象类型: 是否能让我仍然能够更改中的对象的状态,但阻止我将新对象添加到列表中?如果我写错了,请您解释一下正在做什么以及何时应该使用关键字。 问题答案: 不,final关键字不会使列表或其内容不可变。如果您想要一个不可变的列表,则应使用: final关键字的作用是防止您为’synapses’变量分配新值。即,您不能写: 但是,您可以编写:

  • 如果我在一个类中有以下语句,其中Synapse是一个抽象类型: 最终是否允许我仍然能够更改列表中Synapse对象的状态,但阻止我向列表中添加新的Synapse对象?如果我错了,请您解释一下final正在做什么,以及我应该在什么时候使用关键字final。

  • 问题内容: 我有一个关于Java字符串的简单问题。以下简单代码段仅连接两个字符串,然后将它们与进行比较。 比较表达式concat==”string”返回false那么明显(I明白之间的差值equals()和==)。 当这样声明这两个字符串时final, 比较表达式在这种情况下返回。为什么有所作为?它与实习生池有关系吗,还是我被误导了? 问题答案: 当你将(是不可变的)变量声明为,并使用编译时常量表