Java 不可变对象

Java 定义返回一个不能被修改、删除元素的List ava 定义返回一个不能被修改、删除元素的List 阅读详情

不可变对象:
1:一旦创建,对象的状态就不能被修改,任何的修改都会创建一个新的对象
2:类和类属性都应该是final类型
3:如果里面含有非immutable对象,那么客户端的调用都应该返回一个该对象的拷贝

不可变对象的好处:
1:线程安全
2:创建的对象可以做缓存处理,使用静态工厂方法valueOf()返回一个已经存在的对象

例一:

public final class ImmutableObject_1 {
	private final Date date;
	
	public ImmutableObject_1(Date date){
		this.date = new Date(date.getTime());
	}
	
	public Date getDate(){
		return (Date)date.clone(); //返回可变属性的拷贝
	}
}

例二:

public class ImmutableObject_2 {
	private final Name name;
	
	public ImmutableObject_2(Name name){
		//this.name = name; 不能这样写
		this.name = new Name(name.getFirstName(), name.getLastName());
	}
	
	public Name getName(){
		return name.clone();  //返回可变属性的拷贝
	}
	
	public static void main(String[] args) {
		Name name = new Name("Jason", "Lin");
		ImmutableObject_2 immutable = new ImmutableObject_2(name);
		System.out.println(immutable.getName().getFirstName());
		
		immutable.getName().setFirstName("Harry");
		System.out.println(immutable.getName().getFirstName());
	}
}

class Name implements Cloneable{
	private String firstName;
	private String lastName;
	
	public Name(String firstName, String lastName){
		this.firstName = firstName;
		this.lastName = lastName;
	}
	
	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	
	public Name clone(){
		return new Name(this.firstName, this.lastName);
	}
}


Google Play上架:谷歌2024年5月份审核政策改动,审核强度逐步提升 阅读详情

相关推荐

华三模拟器实战:3分钟搞定路由器DHCP地址池配置(附常见错误排查)

本文提供华三模拟器中路由器DHCP地址池的实战配置指南。通过分步详解,帮助用户在3分钟内完成基础设置,并深入讲解多地址池、中继配置等进阶应用。文章重点剖析了DHCP服务无法工作的常见原因,提供从客户端到服务器的系统性排错方法,助力快速定位并解决地址分配失败、获取参数错误等典型问题。

w1x2y3的博客 360

java 不可修改对象_Java 的 String 对象是不可修改的吗,为什么?

常规的角度来说,Java 里的 String 对象确实是不可修改的。对于理由,常规回答可能是:因为 final 关键字限制了对对象的修改。不对对于这个答复我觉得既不是完全准确,也没有回答到核心点。如下这段代码就可以实现对 String 对象的修改。publicstaticvoidmain(String[]args)throws NoSuchFieldException, IllegalA...

weixin_34239861的博客 367

TSMaster如何用珠海创芯CAN卡实现高效CAN通信(附完整驱动安装指南)

本文详细介绍了如何使用TSMaster软件与珠海创芯CAN卡实现高效CAN通信,包括驱动安装、系统配置、ControlCAN.dll替换及TSMaster集成配置等关键步骤。通过实战指南和故障排除技巧,帮助工程师快速搭建稳定可靠的CAN通信测试环境,适用于汽车电子和工业控制等领域。

weixin_29201859的博客 482

Java不可变对象

一、不可变类简介 不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。 可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。 二、不可变类的优点 说完可变类和不可变类的区别,我们需要进一步了解为什么要有不可变类?这样的特性对JAVA

waeceo的专栏 7723

openEuler服务器离线安装实战:从Docker到Samba的完整避坑指南

本文提供了一份详尽的openEuler服务器离线部署实战指南,重点解决了在无网络环境下安装Docker、Samba等软件的依赖难题。文章深入对比了`dnf install`、`rpm`直接安装及禁用仓库安装三种核心方法,并分享了构建本地DNF仓库的进阶策略,旨在帮助运维人员构建高效可靠的离线部署工作流。

weixin_29210759的博客 72

YOLO11实战:手把手教你优化钢材表面缺陷识别模型(基于NEU-DET数据集)

本文详细介绍了如何使用YOLO11优化钢材表面缺陷识别模型,基于NEU-DET数据集进行实战训练。从数据增强、模型架构优化到训练过程控制,全面解析提升钢材缺陷检测性能的关键技术,特别针对裂纹、划痕等典型缺陷提出针对性解决方案。

weixin_29081163的博客 380

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

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

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

华硕ROG玩家国度安装Ubuntu双系统避坑指南:安全启动密钥那些事儿

本文详细解析了在华硕ROG玩家国度设备上安装Ubuntu双系统时,如何正确处理BIOS中的安全启动(Secure Boot)与密钥管理,避免常见的引导失败和Windows系统无法启动问题。指南提供了从数据备份、启动盘制作到BIOS精细设置(如将OS Type改为Other OS而非简单关闭Secure Boot)以及分区规划的完整流程,确保两个系统都能稳定共存。

weixin_29219189的博客 754

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

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

swadian2008的博客 5149

CANoe/CAPL ,远程邮件通知

CANoe/CAPL ,远程邮件通知

蚂蚁小兵 3037

基于FPGA的车道线检测系统设计

本文设计了一种基于FPGA的车道线检测系统,采用Altera Cyclone IV EP4CE10F17C8作为主控芯片,结合OV7725摄像头和LCD显示屏实现实时车道线检测。系统通过硬件流水线处理架构,依次完成图像采集、灰度转换、中值滤波、Sobel边缘检测和Hough变换直线识别等功能模块。所有模块均采用Verilog HDL实现,充分利用FPGA的并行处理能力,显著提升了系统响应速度。测试结果表明,该系统能够有效检测道路车道线,满足实时性要求,为ADAS系统提供了一种高效的硬件解决方案。

huanghm88的专栏 123

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

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

weixin_35680189的博客 257

特殊通信领域场景应用:基于Simulink的数字预失真(DPD)算法仿真建模示例

增益压缩:高功率输入时输出信号的增益下降。相位失真:输入信号的相位随功率变化而改变。带外干扰:非线性失真会引入额外的频谱分量,影响邻道信号。多项式模型:用多项式拟合功率放大器的非线性特性。查找表(LUT):通过离线训练生成预失真映射表。自适应算法:实时调整预失真参数以动态补偿失真。发送端:生成随机比特流并调制为射频信号。预失真模块:对输入信号进行预失真处理。功率放大器模块:模拟非线性失真。接收端:解调信号并评估误码率(BER)。

xiaoheshang_123的博客 274

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

weixin_35653597的博客 323

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java中不可变对象使用避坑

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

daizikui的博客 1061

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java中的不可变对象

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

北川Alex的个人博客 506

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

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

Dingdangr的博客 885

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

不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象、包装器对象等,那么到底为何Java语言要这么设计,真正意图和考虑点是什么?可能一些朋友没有细想过这些问题,今天我们就来聊聊跟不可变对象有关的话题。 一.什么是不可变对象   下面是《Effective Java》这本书对于不可变对象的定义: 1不可变对象(Immutable O...

weixin_43770982的博客 233

java 不可变对象

java 不可变对象。  effective java  P66

a296891673的博客 308

java 中不可变对象

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

neweastsun的专栏 3859

Java不可变对象如何回收_Java不可变对象

定义:一个对象的状态(对象的属性,并非对象在JVM中的生命周期中的状态)在对象被创建之后就不再变化。实现方式:将类声明为final,所以它不能被继承;将所有的成员声明为私有的,这样就不允许直接访问这些成员;对变量不要提供setter方法;将所有可变的成员声明为final,这样只能对它们赋值一次;通过构造器初始化所有成员,进行深拷贝(deep copy);在getter方法中,不要直接返回对象本身,...

weixin_34683262的博客 196
上一篇: 软件开发最佳实践
下一篇: Ant之path属性
Wo_Ai_Java
博客等级 码龄16年 26粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值