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

java中的immutable和final有什么区别?

申宜
2023-03-14
问题内容

最近有人问我这个问题。但是无法简明地解释究竟是什么将这两个概念区分开来。

例如

最终且不可变:

final String name = "John";

如果我现在写

name = "Sam";

我会收到编译器错误

不可变:

String name = "John";
name = "Sam";

有用。

我认为这解释了它在应用中的一部分。但是我可以对这两个话题得到一个很好的,易于理解的解释吗?


问题答案:

final意味着您不能将对象的引用更改 为指向另一个引用或另一个对象 ,但仍可以更改其状态(例如使用setter方法)。凡 不变
意味着对象的 实际值 不能改变,但你可以改变它的引用到另一个。

关于问题的第二部分(不变性部分),编译器将创建一个String值为“ Sam” 的新对象,并将其指向该对象name



 类似资料:
  • 在Kotlin中,val用于使变量/属性不可更改,那么final的用途是什么?正如我所知,在java中,final用于限制继承或使变量为常量,但在kotlin中,val是常量部分,那么final在kotlin中会做什么呢?

  • Dart中的和关键字有什么区别?

  • 问题内容: 我一直认为Java 中的运算符用于验证其两个布尔操作数是否均为,并且该&运算符用于对两种整数类型进行按位运算。 最近我知道,也可以使用运算符来验证其两个布尔操作数是否均为,唯一的区别是即使LHS操作数为false,它也会检查RHS操作数。 Java中的运算符是否在内部重载?还是在这背后有其他概念? 问题答案: <-验证两个操作数 <-停止评估第一个操作数是否为false,因为结果为fa

  • 问题内容: 我只是想知道为什么我们通常在两个布尔之间使用逻辑OR 而不是按位OR ,尽管它们都运行良好。 我的意思是,请看以下内容: 我们可以代替使用吗?与和相同。 问题答案: 如果您使用和形式,而不是这些运算符的和形式,则Java不会费心地单独评估右手操作数。 这是您是否希望缩短评估时间的问题-在 大多数情况 下都是如此。 说明短路好处的一个好方法是考虑以下示例。 正如Jeremy和Peter提

  • 问题内容: 我在看一些模拟的OCJP问题。我遇到了一个非常令人困惑的语法。这里是: 为什么输出在和之间变化? 问题答案: 问题只是和您玩弄混乱的空格。 是通常的(不等于)比较。 另一方面: 最好写成如下形式: 因此,这是两个运算符。 首先反转。 然后将其分配回。 赋值运算符返回分配的值。因此,计算结果为true-这就是您要打印的内容。

  • 本文向大家介绍final 在 Java 中有什么作用?相关面试题,主要包含被问及final 在 Java 中有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 final 修饰的类叫最终类,该类不能被继承。 final 修饰的方法不能被重写。 final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。