Java中常用不可变类
Java中常用的不可变类是指一旦被创建,它们的值就不可更改的类。在实际开发中,使用不可变类时可以带来多种优点,比如线程安全、缓存、副本等。下面我们将介绍Java中常见的不可变类:
1.字符串(String)
Java中的String类是不可变的。也就是说,一旦创建了一个字符串对象,该对象就无法更改。因此,如果需要对某个字符进行修改,需要创建一个新的字符串对象。
String s1 = "Hello";
s1 = s1 + " World"; // 创建了一个新的字符串对象
2.基本数据类型的封装类型,如Integer、Float、Boolean等
与String类似,Java中的整型、浮点型和布尔类型也都是不可变的,一旦被创建就不能更改。
Integer i = 5;
i++; // 创建了一个新的Integer对象
3.枚举类型(Enum)
Java中的枚举类型也是不可变的。枚举常量一旦被创建,其值就固定不变,无法通过程序代码进行修改。
enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
4.日期时间类,如LocalDate、LocalTime、Instant等
Java 8引入了新的日期时间API,其中日期时间类、时区等都是不可变的。
LocalDate date = LocalDate.of(2023, 4, 21);
date = date.plusDays(1); // 创建了一个新的LocalDate对象
5.BigDecimal、BigInteger等数值类
Java中的BigDecimal和BigInteger等数值类也都是不可变的。这些类的使用可以避免精度丢失和舍入误差等问题。
BigDecimal d1 = new BigDecimal("0.1");
BigDecimal d2 = new BigDecimal("0.2");
BigDecimal sum = d1.add(d2); // 创建了一个新的BigDecimal对象
解决不可变类的方法
尽管不可变类具有多种优点,但在某些情况下,程序需要对字符串或其他类型进行修改。此时可以使用可变类,例如StringBuilder。StringBuilder类是可变的,它允许在已经初始化的对象上添加、插入、删除字符。
StringBuilder builder = new StringBuilder("Hello");
builder.append(" World!"); // 在原有字符串上添加,不需要创建新的字符串对象
String result = builder.toString(); // 转换为不可变的String对象
另外,由于String和StringBuilder之间的相互转换比较容易,因此可以根据实际需要自由地在两种类型之间切换。
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.append(" World!");
str = builder.toString();
总之,Java中的不可变类具有许多优点,可以提高程序的性能、可靠性和安全性。在实际开发中,根据需求选择合适的类是非常重要的。
Java中常用不可变类的更多相关文章
- Java中的不可变类理解
一.Java中的不可变类 不可变类(Immutable Objects):当类的实例一经创建,其内容便不可改变,即无法修改其成员变量. 可变类(Mutable Objects):类的实例创建后,可以修 ...
- java中常用的工具类(三)
继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类 ...
- java中常用的工具类(二)
下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- java中常用的工具类(一)
我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工 ...
- Java中的不可变类
概念:不可变类的意思是创建该类的实例后,该实例的属性是不可改变的.java中的8个包装类和String类都是不可变类.所以不可变类并不是指该类是被final修饰的,而是指该类的属性是被final修饰的 ...
- Java基础学习(五)-- Java中常用的工具类、枚举、Java中的单例模式之详解
Java中的常用类 1.Math : 位于java.lang包中 (1)Math.PI:返回一个最接近圆周率的 (2)Math.abs(-10):返回一个数的绝对值 (3)Math.cbrt(27): ...
- 《Java中的不可变类》
//不可变类举例: /* 下面程序试图定义一个不可变类Person类,但=因为Person类包含一个引用类型的成员变量, 且这个引用类是可变类,所以导致Person类也变成了可变类. */ class ...
- java中常用的帮助类。加快开发速度
数据库帮助类 package com.cwnu.uitl; import java.sql.*; /** * 数据库基础操作实现类 * * @author BlackWinter * * @date ...
- 关于java中的不可变类(转)
如何在Java中写出Immutable的类? 要写出这样的类,需要遵循以下几个原则: 1)immutable对象的状态在创建之后就不能发生改变,任何对它的改变都应该产生一个新的对象. 2)Immuta ...
- Java中常用的数据结构类
结构体系图 List ArrayList.LinkedList.Vector有什么区别? ArrayList 只能装入引用对象(基本类型要转换为封装类): 线程不安全: 底层由数组实现(顺序表),因为 ...
随机推荐
- 解密Prompt系列16. LLM对齐经验之数据越少越好?LTD & LIMA & AlpaGasus
LLM Agent中间插个队,总结下指令微调.对齐数据相关的方案,已经凑够7篇论文可以召唤神龙啦!论文都是以优化指令样本为核心,Data-Centric的观点比较一致:指令微调也就是对齐阶段的数据质量 ...
- Python使用socket的UDP协议实现FTP文件服务
简介 本示例主要是用Python的socket,使用UDP协议实现一个FTP服务端.FTP客户端,用来实现文件的传输.在公司内网下,可以不适用U盘的情况下,纯粹使用网络,来实现文件服务器的搭建,进而实 ...
- Python基础合集
入门介绍 01.python由来与发展介绍 02.WEB项目开发流程 第一篇 markdown编辑器 01.markdown基本语法 02.Typora简介与安装 03.Windows上gitee+T ...
- python第6章code
01条件判断语句 # 条件判断语句(if语句)# 语法:if 条件表达式 : # 代码块# 执行的流程:if语句在执行时,会先对条件表达式进行求值判断,# 如果为True,则执行if后的语句# 如果为 ...
- Opencv系列之一:简介与基本使用
1 Opencv简介 Opencv是计算机视觉中经典的专用库,其支持多语言,跨平台,功能强大.Opencv-Python为Opencv提供了Python接口,使得使用者在Python中能够调用C/C+ ...
- 研发日常踩坑-Mysql分页数据重复
踩坑描述: 写分页查询接口,order by和limit混用的时候,出现了排序的混乱情况 在进行第N页查询时,出现与第一前面页码的数据一样的记录. 问题 在MySQL中分页查询,我们经常会用limit ...
- js数据结构--栈
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- 前端CodeReivew实践
把Code Review变成一种开发文化而不仅仅是一种制度 把Code Review 作为开发流程的必选项后,不代表Code Review这件事就可以执行的很好,因为Code Review 的执行,很 ...
- CSP 2022 游寄
Day -2147483648 官网有了通知,但选手注册不知为何坏掉了: 先开坑: Day -大概两个月 注册了,但老师还没给我审核呜呜呜 第一轮 早上 早上起床就直接来机房了,不用跑操欸嘿. 上午 ...
- TOPSIS模型
TOPSIS模型主要是用于评估类模型 一些基本概念: 因为TOPSIS模型是用于评价类的模型,所以会有一些指标的概念,所有指标并非越大越好,例如我们在评价一人的时候会有成绩.和他人发生争吵的次数这两个 ...