Java中的mutable和immutable对象
Java中的mutable和immutable对象 1.mutable(可变)和immutable(不可变)类型的区别
可变类型的对象:提供了可以改变其内部数据值的操作,其内部的值可以被重新更改。
不可变数据类型:其内部的操作不会改变内部的值,一旦试图更改其内部值,将会构造一个新的对象而非对原来的值进行更改。
2.mutable和immutable类型的优缺点
mutable immutable
优点 可变类型会减少数据的拷贝次数,从而其效率 要高于immutable 由于内部数据不可变,所以对其频发修改会产生大量的临时拷贝,浪费空间 缺点 可变类型由于其内部数据可变,所以其风险更大 内部数据的不可变导致其更加安全,可以用作多线程的共享对象而不必考虑同步问题 3.举例
Java中的String类的对象都是典型的immutable数据类型,一个String对象一旦被new出来,那么其代表的数据便不可被重新assigned;StringBuilder类的对象却是mutable的数据类型,当一个StringBuilder对象被创建出来之后,其内部的值是可以通过某些内部方法进行改变的。
通过snapshot diagram对两种类型进行分析:
通过snapshot可以看到:当试图更改String的内部数据时,s并不在指向原来的对象,而是指向了一个新的String对象。
通过snapshot可以看到:当更改sb内部数据的时候,并不像String类那样重新产生了一个新的对象,而是直接更改了原对象的内部数据,sb的引用并未更改。
4.如何构造一个immutable类
1)确保fileds中的成员都被private final修饰:private保证内部成员不会被外部直接访问;final确保在成员被初始化之后不会被重新assigned。
2)不提供改变成员的方法,例如setX
3)使用final修饰自定义类,确保类中的所有方法不会被重写。
4)如果类中的某成员为mutable类型,那么在初始化该成员或者企图使用get方法从外部对其进行观察的时候,应该使用深度拷贝,确保类immutable。
- 在SQLMAP中使用动态SQL
- 使用OQL“语言”构造ORM实体类的复杂查询条件
- AdoHelper使用MySQL存储过程示例
- 使用8位字节的编码格式将字节流安全的转换成String
- 同样的SQL语句在查询分析器执行很快,但是网站上执行超时的诡异问题
- PDF.NET数据开发框架操作MySQL实体类操作实例
- 使用PDF.NET数据开发框架的实体操作语言OQL构造复杂查询条件
- 鲶鱼CMS存储XSS漏洞披露
- 【分享】 纯 js 表单控件 —— 让 “增改查” 更轻松!
- K-近邻算法(KNN)概述
- 不使用DalFactory和IDAL,支持多种数据库应用
- MVC和三层,我的一个不成熟的看法,大家批批
- 实体类的二进制序列化
- 多任务验证码识别
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- python 利用jinja2模板生成html代码实例
- vue项目使用 富文本 封装
- typescript基础篇(5):类
- .Net微服务实战之Kubernetes的搭建与使用
- 使用Prometheus监控Golang服务-基于YoyoGo框架
- 使用jedis面临的非线程安全问题
- 基于UVM的UART验证环境
- 潘石屹用Python解决100个问题 | 打印菱形
- Android:源码解析 Dialog的窗口机制
- Java|获取图片rgb值
- (数据科学学习手札93)利用geopandas与PostGIS进行交互
- 设计模式(三):旅行的角度理解抽象工厂模式
- 机器学习中的优化算法!
- 【进阶篇】Python+Go——带大家一起另寻途径提高计算性能
- 爬取豆瓣高分电影。