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 只能装入引用对象(基本类型要转换为封装类): 线程不安全: 底层由数组实现(顺序表),因为 ...
随机推荐
- 基于 ACK Serverless 解锁你家萌宠的 AI 形象
基于 ACK Serverless 解锁你家萌宠的 AI 形象详情 1. 计费说明 必看!!必看!!必看!! 本实验为付费体验,需要消耗账号费用.体验后若不再需要使用,请及时释放资源,避免持 ...
- FreeRTOS 中的调度算法
FreeRTOS 中的调度算法 01 调度算法概述 调度算法的作用: 实时系统的调度需求 相应时间要求 任务优先级 资源利用率 FreeRTOS 调度算法的目标 提供可预测的任务调度 实现任务的优先级 ...
- 在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务
目录 构建服务层 接口路由层 PostMan 调用 采用 Fast API 搭建服务接口: https://www.cnblogs.com/vipsoft/p/17684079.html Fast A ...
- [MAUI]深入了解.NET MAUI Blazor与Vue的混合开发
@ 目录 Vue在混合开发中的特点 创建MAUI项目 创建Vue应用 使用element-ui组件库 JavaScript和原生代码的交互 传递根组件参数 从设备调用Javascript代码 从Vue ...
- 动态规划 DP 的一些笔记以及解题思路
万物的开始,首先介绍一下动态规划(dynamic programming,DP)的基本概念:动态规划适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此动态规划方法耗费时间远远少于 ...
- [Python] 利用python的第三方库xlrd和xlwt来处理excel数据
今天在处理excel表格的时候,有一个需要提取表格中部分数据的操作.如果人工操作的话,有将近几千行,这样重复操作劳民伤财. 所以python就派上用场了. 简单介绍一下我要处理的问题,在excel一列 ...
- LAMP搭建流程与应用
LAMP搭建流程 1.环境准备 [root@localhost opt]# systemctl stop firewalld.service [root@localhost opt]# seten ...
- C++基础杂记(1)
结构体中的位字段 共用体 烦人的枚举 枚举的声明与赋值 枚举的取值范围与强制类型转换 枚举的注意事项 指针 为什么是 int* ptr 而不是 int *ptr ? 避免危险的指针 使用array和v ...
- 🔥🔥面试官:你会如何设计QQ中的网络协议?
引言 在设计QQ这道面试题时,我们需要避免进入面试误区.这意味着我们不应该盲目地开展头脑风暴,提出一些不切实际的想法,因为这些想法可能无法经受面试官的深入追问.因此,我们需要站在前人的基础上,思考如何 ...
- 题解 P9326
前言 数学符号约定 \(n\):任意正整数. \(\#\):从未出现过的小写字母. \(\Sigma\):字符集,这里指小写字母集合. \(S\):最终答案的字符矩阵. 其余符号同题目翻译中所写. 如 ...