java 中的“final”关键字可用于定义常量值以及防止变量、方法,或类被更改或覆盖。另一方面,不变性描述了对象在其存在过程中保持恒定状态的特征。对象形成后,其值就不会改变。
变量、方法和类受到“final”关键字的限制,但不变性更进一步,保证了对象的整个状态得到保留。
让我们在本文中了解最终与不变性之间的主要区别。
java 最终版java中的final关键字有几个特点:
最终变量:初始化后其初始值无法修改。它们经常被用来声明不可更改或不变的值。
最终方法:它们不能被子类修改,保证它们的行为一致。它们有助于保持重要程序的有效性。
最终类:它们无法被其他类扩展,保证它们的实现不被改变。 final 类经常用于构建安全性或实用程序类。
初始化:为了确保最终变量具有已知值,必须在声明期间或构造函数中为其赋予值。
性能:final 的使用使编译器能够更成功地优化代码,从而可能提高性能。
安全性:final 通过防止未经授权的敏感数据或行为更改来提高 java 程序的安全性。
java 中的不变性在 java 中,不可变类是指对象的内容一旦创建就无法更改的类。要创建不可变类,请遵循以下要求:
将类声明为 final 以防止继承。
将类的数据成员声明为私有以限制直接访问。
将数据成员声明为final,以防止在对象创建后进行修改。
使用参数化构造函数通过深拷贝初始化所有字段,防止通过对象引用进行修改。
在 getter 方法中返回对象的副本(深层副本),而不是实际的对象引用,以保持不变性。
通过遵循这些特性,您可以在 java 中创建自己的不可变类,类似于 integer、boolean、byte、short 和 string 等内置不可变类。
最终和不变性之间的差异当谈到 java 编程时,理解“final”和“immutable”之间的区别至关重要。
最终:保留对象引用并允许状态突变
让我们从“最终”开始。当一个对象或变量在java中被标记为final时,这意味着在给它一个值之后,该引用不能更改为指向另一个对象或变量。重要的是要记住,尽管引用是固定的,但使用相关的 setter 方法仍然允许您更改对象的状态。因此,即使引用本身无法更改,您仍然可以使用可访问的方法来更改对象的内部属性或属性。换句话说,final 确保对象引用的稳定性,同时允许更改其内部状态。
不可变:不可变值和引用灵活性
现在让我们将注意力转向“不可变”。在java中,不变性是指对象在创建后其实际值不能更改。但是,与 final 不同的是,您可以修改引用本身并将其分配给另一个对象或变量。这意味着虽然对象的值保持不变,但您可以更改其引用以指向不同的实例。
应用和范围:final 和不变性
修饰符“final”适用于 java 中的变量而不是对象。它强调对更改引用或变量的限制,同时允许修改对象的状态。另一方面,不变性适用于对象,表明它们的值一旦创建就不能更改。必须了解这两个概念之间的区别,以确保 java 程序达到预期的行为。
含义:对象地址和状态可变性
当我们将一个对象或变量声明为final时,我们就强制其地址的永久性。换句话说,引用保持固定,防止其指向的位置发生任何变化。相比之下,不变性强调了对象一旦创建就无法修改其状态。这意味着对象的内部值无法更改,从而在整个程序执行过程中保持其完整性和一致性。
stringerbuffer()该代码演示了 java 中“final”关键字和不变性之间的区别。 “final”关键字使变量成为常量并防止重新分配,而不变性意味着对象本身不能被修改。
算法第 1 步:声明变量“sb”作为最终 stringbuffer 对象,初始值为“hello”。
第2步:使用append()方法将“tp”追加到“sb”引用的stringbuffer对象中。
第 3 步:打印“sb”的更新值,即“hellotp”。
第 4 步:尝试将新的 stringbuffer 对象重新分配给变量“sb”,这会导致编译时错误。
第五步:打印“sb”的值,但由于上一步错误,该行不会被执行。
示例// java program to illustrate difference between final and immutability public class tutorialspoint { public static void main(string[] args) { final stringbuffer sb = new stringbuffer(hello); // we can make changes even though reference variable sb is final sb.append(tp); system.out.println(sb); // compile time error will appear here. this is because the final variable cannot be reassigned sb = new stringbuffer(hello world); system.out.println(sb); }}
输出tutorialspoint.java:16: error: cannot assign a value to final variable sb sb = new stringbuffer(hello world); ^1 error
结论总而言之,“最终”和不变性在 java 中具有截然不同的特征。 “final”关键字限制对象引用的重新分配,但允许修改对象的状态。
相反,不变性可以防止更改对象的值,但允许重新分配引用。了解“final”和不变性的应用和范围对于设计可靠的 java 程序非常重要。当一个对象或变量被声明为final时,它的地址保持固定,而不变性则确保对象的内部值不能被修改。示例代码演示了其中的差异,其中“final”阻止重新分配,从而导致编译时错误。
以上就是java中的final与不可变性比较的详细内容。