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 只能装入引用对象(基本类型要转换为封装类): 线程不安全: 底层由数组实现(顺序表),因为 ...
随机推荐
- 一次考试的dp题
很明显是dp 看题目的时候我们先进行初步的思考,发现一个性质 一个点时不可能被重复覆盖三次的很显然,如果一个点被覆盖了3次,这3个覆盖他的区间一定是有一个区间被完全包含的,因为有贡献的左右端点只有两个 ...
- P1522 [USACO2.4] 牛的旅行 Cow Tours
Problem 题目简述 给你两个独立的联通块,求:在两个联通块上各找一个点连起来,使得新的联通块的直径的最小值. 思路 本题主要做法:\(Floyd\). 首先,Floyd求出任意两个点之间的最短路 ...
- Electron原生菜单
.markdown-body { color: rgba(56, 56, 56, 1); font-size: 15px; line-height: 30px; letter-spacing: 2px ...
- Qt中QTabWidget添加控件(按钮,label等)以及使用方法
今天遇到了一个问题,已经在QTabWidget每一行添加了一个按钮,我有一个需求就是,点击每一行的按钮都有各自的响应 首先说一下添加控件代码: 添加文字可以用setItem,添加控件就得用setCel ...
- Codeforces 1566E Buds Re-hanging
原题链接 Codeforces Global Round 16 E. Buds Re-hanging 首先想到,如果我们把一个\(buds\)挂到一个叶子上,那么会使得叶子总数减\(1\). 还有就是 ...
- Codeforces Round #699 (Div. 2) A~C题解
写在前边 链接:Codeforces Round #699 (Div. 2) 好自闭哈哈,\(B\)题暴力fst了,第二天改了一个字母就A了,第3题写了一个小时,然后又调了三四个小时,看不到样例,最终 ...
- Android 使用 ContentProvider 简单操作数据库
ContentProvider 可以用来原生读写 Android 自带的数据库 SQLite. 使用 Studio 创建一个 ContentProvider, 名字叫 TestContentProvi ...
- 【主流技术】详解 Spring Boot 2.7.x 集成 ElasticSearch7.x 全过程(二)
目录 前言 一.添加依赖 二. yml 配置 三.注入依赖 四.CRUD 常用 API ES 实体类 documents 操作 常见条件查询(重点) 分页查询 排序 构造查询 测试调用 五.文章小结 ...
- 潜在威胁信息模型(PTIM)-Potential threats Information Modeling
前言 这只是一位学识浅薄博主的一个突然想法,还望各位专业领域的专家教授轻怼 潜在威胁信息模型 目前的想法是通过全城摄像头建立城市的潜在威胁信息模型,这个潜在威胁可以包括:天气灾害(冰雹.雾霾能见度等) ...
- HTML5实战—canvas绘图之贝塞尔曲线
1.二次贝塞尔曲线 quadraticCurveTo(cpx,cpy,x,y) //cpx,cpy表示控制点的坐标, x,y表示终点坐标: 数学公式表示如下: 二次方贝兹曲线的路径由给定点P0.P1. ...