java 不可变对象

Java不可变对象整洁之道 在 Java 语言中,不可变类指的是这个类的实例是不可修改的,在创建类实例时我们需要指定这个类所有的属性值,而且在以后的生命周期中这些属性值都不能重新赋值。经验丰富的你可能已经知道 Java 中已经存在一些不可变类型,例如 String,BigInteger 和 BigDecimal 等。   不可变类对于开发者来说有如下好处:   · 易于设计,实现和使用   · 使用过程中不容易导致出错   · 更加的安全,可以随意地共用   · 天然具备线程安全性,无需增加额外的同步操作   本文的目标是介绍 Java 开发中构建和自动生成不可变类的几种整洁的方式,其中着重介绍自动生成不可变 立即下载

不可变对象是指一个对象的状态在对象被创建之后就不再变化。

不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。

创建一个不可变类:

  1. 将类声明为final,所以它不能被继承;

  2. 将所有的成员声明为私有的,这样就不允许直接访问这些成员;

  3. 对变量不要提供setter方法;

  4. 将所有可变的成员声明为final,这样只能对它们赋值一次;

  5. 通过构造器初始化所有成员,进行深拷贝(deep copy);

  6. 在getter方法中,不要直接返回对象本身,而是克隆对象,并返回对象的拷贝;

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public final class Immutable {  
    private final int id;  
    private final String name;  
    private final HashMap map;  
    
    public int getId() {  
        return id;  
    }  
    
    public String getName() {  
        return name;  
    }  
    
    /** 
     * 可变对象的访问方法 
     */  
    public HashMap getMap() {  
        return (HashMap) testMap.clone();  
    }  
    
    /** 
     * 实现深拷贝的构造器*/  
    public Immutable(int i, String n, HashMap hm){this.id=i;  
        this.name=n;  
        HashMap tempMap=new HashMap();  
        String key;  
        Iterator it = hm.keySet().iterator();  
        while(it.hasNext()){  
            key=it.next();  
            tempMap.put(key, hm.get(key));  
        }  
        this.map = tempMap;  
    }  
   
}
为什么Java字符串是不可变对象? 本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Java的String类是不可变对象?让我们一起来分析一下。   答案一:   流行的Java面试题之一是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类型?   不可变对象,顾名思义是创建后不可以改变的对象,典型的例子是Java中的String类。   String s="ABC";   s.toLowerCase();   如上s.toLowerCase()并没有改变 立即下载

相关推荐

【TM1650】STM8S TM1650芯片控制程序

以下为.h文件: #ifndef __TM1650_I2C_H #define __TM1650_I2C_H #include "stm8s.h" #include "stm8s_gpio.h" #include "tim1.h" #include "usart2.h" #include <iostm8s103f3.h> #include <intrinsics....

cxw312864660的博客 1万+

Java 中的不可变对象(Immutable Objects)详解

不可变对象指的是在创建之后,它们的值无法被修改的对象。这意味着如果想改变一个不可变对象的值,就需要创建一个新的对象。在许多编程语言中,字符串和数字都是不可变的对象。这个新字符串就是一个全新的字符串对象,和原来的字符串对象没有关系。不可变对象的一个好处是它们更容易被并发程序安全地使用。因为不可变对象是无法修改的,所以不需要担心在多线程环境下出现竞态条件的问题。此外,不可变对象也更容易进行缓存和复用。

swadian2008的博客 5144

【FPGA】DDR3调试总结

DDR3管脚根据不同的功能可以分为:数据组、地址组、控制组和电源组。如图上所示,共96个管脚。

m0_51679724的博客 4967

Java基础:面向对象编程7

本文主要介绍了Java面向对象编程中的不可变对象、方法重载和方法重写相关知识。

专注Java和MySQL领域知识分享 1264

大语言模型无代码构建知识图谱概述

由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。

colorknight的专栏 1817

Vivado IP核与License许可全解析:从免费到收费,从评估到部署

本文全面解析Vivado IP核与License许可机制,从免费到收费IP核的选型指南到License的申请与部署策略。详细介绍了Xilinx官方IP核的优势与局限,第三方IP核的风险与应对,以及实战中的资源优化技巧和版本兼容性问题,帮助开发者高效利用Vivado工具链。

weixin_29169505的博客 367

什么是不可变对象(immutable object)?Java中怎么创建一个不可变对象?

不可变对象(Immutable Object)是指一旦创建后,其状态就不能被修改或改变的对象。在Java中,不可变对象具有以下特征:1.状态不可变性(State Immunity):对象的属性值不能被修改。2.线程安全性(Thread Safety):由于不可变对象的状态不能改变,多线程访问时不需要额外的同步措施,因此是线程安全的。3.安全性(Security):不可变对象的值不能被恶意修改,因此适用于安全敏感的上下文。

Blue92120的博客 681

第1章 机器人SLAM算法工程师主要做什么的?(附SLAM学习路线及资料推荐)

对于想从事机器人与自动驾驶领域的在校大学生、研究生来说,建图定位算法工程师是一个极具发展潜力的岗位,而SLAM知识体系则是胜任该岗位的核心支撑。从基础的计算机工具、C++语言,到核心的开源框架、数学知识,再到硬件衔接与项目实践,每一个环节都不可或缺。建议大家结合自身兴趣确定侧重方向(如激光SLAM、融合定位),先通过开源项目建立实践认知,再补全理论知识,同时积极参与社区交流。

行知SLAM 952

深入理解Java中的不可变对象

二哥,你能给我说说为什么 String 是 immutable 类(不可变对象)吗?我想研究它,想知道为什么它就不可变了,这种强烈的愿望就像想研究浩瀚的星空一样。但无奈自身功力有限,始终觉得雾里看花终隔一层。二哥你的文章总是充满趣味性,我想一定能够说明白,我也一定能够看明白,能在接下来写一写吗? 收到读者小 R 的私信后,我就总感觉自己有一种义不容辞的责任,非要把 immutable 类说明白...

沉默王二 6137

YOLOv11改进 | 网络结构代码逐行解析(二) | yolov11中的Mosaic增强详解

本文给大家带来的是YOLOv10中的Mosaic增强代码的详解,可能有部分人对于这一部分比较陌生,有的读者可能知道Mosaic增强但是不知道其工作原理,具体来说Mosaic增强就是指我们的数据集中的图片在输入给模型之前的一个处理过程(我们的图片并不是直接就输入给模型了,大家的训练结果中的结果检测图片大家可以看到数据集中多个图片会组合在一起这就是简单的Mosaic增强),下面我就来讲解一下其在YOLOv10中工作原理和代码定义,下面图片为一个Mosaic增强后的图片。​。

Snu77的博客 5021

用Python爬取政府采购信息的实战全流程

以 Playwright 自动采集政府采购信息结构化存储与查询可拓展关键词过滤与通知机制。

2201_76125261的博客 1145

Java-可变对象和不可变对象介绍

不可变对象(ImmutableObjects)即对象一旦被创建它的状态(对象的数据,也即对象属性值)就不能改变,反之即为可变对象(MutableObjects)。不可变对象的类即为不可变类(ImmutableClass)。

qq_42167399的博客 1580

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在Java中怎么创建不可变对象

在Java中,创建不可变对象是一种良好的编程实践,有助于避免数据不一致性,提高线程安全性,并允许缓存对象的哈希码等。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 7300

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java 不可变对象_Java多线程——不可变对象

不可变对象条件对象需要满足一下三个条件才是不可变对象:1、对象创建以后其状态就不能修改2、对象所有域都是final类型3、对象是正确创建的(对象在创建期间,this引用没有溢出)简而言之就是将类声明为final,将所有的成员声明为私有的,对变量不提供set方法。将所有可变的成员声明为final。在get方法中不返回对象本身,而是克隆对象的拷贝。(可参考String类)。final关键字final关...

weixin_35680189的博客 257

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java不可变对象讲解

1.使用基本的final创建:数据类型变量不可被修改,但是引用类型变量仍然可以被修改,线程不安全 package com.zr.concurrency.test.notsafe.immutable; import com.zr.concurrency.annotation.ThreadNotSafe; import lombok.extern.slf4j.Slf4j; import java....

liangruilz的博客 322

Java 不可变对象

  不可变对象(immutable objects):一旦对象被创建,它们的状态就不能被改变(包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变),每次对他们的改变都是产生了新的对象。JDK本身就自带了immutable类,比如String,Integer以及其他包装类。 遵循原则: 1. 类添加final修饰符,保证类不被继承。如果类...

baichong5435的博客 180

java 不可变对象_java 什么是不可变对象

展开全部不可变对象是指一个对象的状62616964757a686964616fe78988e69d8331333361313934态在对象被创建之后就不再变化。不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。创建一个不可变类:将类声明为final,所以它不能被继承;将所有的成员声明为私有的,这样就不允许直接访问这些成员;对变量不要提供setter方法;将所有可变的成员声明为fin...

weixin_35653597的博客 322

Java中怎么创建一个不可变对象?

不可变对象是指一旦创建后,其状态(即对象的数据)就不能被修改或改变的对象。这种对象具有一些重要的特性,如线程安全性、安全性、可重用性等。

Dingdangr的博客 885

Java中的不可变对象

Java中的不可变对象 一.需要的条件 不可变对象需要满足的条件 对象创建之后其状态就不可改变 对象所有域都是final类型 对象是正确创建的(在对象创建期间,this引用没有逸出) 二.final关键字修饰 final关键字:类、方法、变量 修饰类:不能被继承 修饰方法:1、锁定方法不被继承类修改;2、效率 修饰变量:基本数据类型变量、引用类型变量 三.其他定义不可变对象的方式 Jav...

北川Alex的个人博客 506

Java不可变对象

不可变对象 不可变对象(Immutable Object):对象一旦被创建后,对象所有的状态及属性在其生命周期内不会发生任何变化。 一旦创建,这个对象(状态/值)不能被更改了。 其内在成员变量的值就不能修改了。 典型的不可变对象 1.八个基本型别的包装类的对象 2.String,BigInteger等的对象 public class ImmutableObject { pri...

Acapplella的博客 203

java中不可变对象使用避坑

1,不要大量使用不可变对象和不可边对象提供的方法(每次调用不可变对象的修改方法时,会2,计算密集型任务不要使用包装类(包装类体积大,数据密度低,增加取存数据时间。运算时也会创建大量的包装类对象出来)

daizikui的博客 1061

java 中不可变对象

java 中不可变对象 本文我们说明什么是不可变对象,在java 中如何实现以及其有和好处。 1. 什么是不可变对象 不可变对象是指对象被创建之后,其内部状态保存不变的对象。这意味着其公开的API保证在对象的整个生命周期中其行为保持一致。 下面我们看看String类,即使我们使用其replace api提供了一个可变的行为,但其原字符串并没有改变: String name = "baeldung"...

neweastsun的专栏 3859
上一篇: 15个顶级Java多线程面试题及答案
下一篇: Java CyclicBarrier的用法
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值