0

0

Java中的Final与不可变性比较

WBOY

WBOY

发布时间:2023-08-26 21:37:05

|

1361人浏览过

|

来源于tutorialspoint

转载

java中的final与不可变性比较

Java 中的“final”关键字可用于定义常量值以及防止变量、方法,或类被更改或覆盖。另一方面,不变性描述了对象在其存在过程中保持恒定状态的特征。对象形成后,其值就不会改变。

变量、方法和类受到“final”关键字的限制,但不变性更进一步,保证了对象的整个状态得到保留。

让我们在本文中了解最终与不变性之间的主要区别。

Java 最终版

Java中的final关键字有几个特点:

立即学习Java免费学习笔记(深入)”;

  • 最终变量:初始化后其初始值无法修改。它们经常被用来声明不可更改或不变的值。

  • 最终方法:它们不能被子类修改,保证它们的行为一致。它们有助于保持重要程序的有效性。

  • 最终类:它们无法被其他类扩展,保证它们的实现不被改变。 Final 类经常用于构建安全性或实用程序类。

  • 初始化:为了确保最终变量具有已知值,必须在声明期间或构造函数中为其赋予值。

  • 性能:final 的使用使编译器能够更成功地优化代码,从而可能提高性能。

  • 安全性:Final 通过防止未经授权的敏感数据或行为更改来提高 Java 程序的安全性。

Java 中的不变性

在 Java 中,不可变类是指对象的内容一旦创建就无法更改的类。要创建不可变类,请遵循以下要求:

  • 将类声明为 Final 以防止继承。

  • 将类的数据成员声明为私有以限制直接访问。

  • 将数据成员声明为final,以防止在对象创建后进行修改。

  • 使用参数化构造函数通过深拷贝初始化所有字段,防止通过对象引用进行修改。

  • 在 getter 方法中返回对象的副本(深层副本),而不是实际的对象引用,以保持不变性。

通过遵循这些特性,您可以在 Java 中创建自己的不可变类,类似于 Integer、Boolean、Byte、Short 和 String 等内置不可变类。

网龙b2b仿阿里巴巴电子商务平台
网龙b2b仿阿里巴巴电子商务平台

本系统经过多次升级改造,系统内核经过多次优化组合,已经具备相对比较方便快捷的个性化定制的特性,用户部署完毕以后,按照自己的运营要求,可实现快速定制会费管理,支持在线缴费和退费功能财富中心,管理会员的诚信度数据单客户多用户登录管理全部信息支持审批和排名不同的会员级别有不同的信息发布权限企业站单独生成,企业自主决定更新企业站信息留言、询价、报价统一管理,分系统查看分类信息参数化管理,支持多样分类信息,

下载

最终和不变性之间的差异

当谈到 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”阻止重新分配,从而导致编译时错误。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

367

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.11.30

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

348

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1080

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

185

2025.09.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号