当前位置: 首页 > news >正文

java常用类(上)

 笔上得来终觉浅,绝知此事要躬行

🔥 个人主页:星云爱编程

🔥 所属专栏:javase

🌷追光的人,终会万丈光芒  

 🎉欢迎大家点赞👍评论📝收藏⭐文章

  

目录

一、包装类

1.1包装类的分类

1.2包装类和基本数据的转换

1.3案例

1.4Integer创建机制 

1.5Integer比较问题

二、String

2.1基本介绍

2.2 String对象的创建方式

 创建机制理解:

2.3 String比较问题

2.4字符串特性

2.4.1介绍

2.4.2总结:

2.4.3例题:

2.5 String常用方法

三、StringBuffer

3.1基本介绍

3.2StringBuffer比较String

3.3StringBuffer的构造器

3.4String和StringBuffer相互转换

3.5 StringBuffer类常见方法

四、StringBuilder

4.1基本介绍

4.2 StringBuilder常用方法

4.3 String、StringBuffer、StringBuilder的比较

4.4  String、StringBuffer、StringBuilder的使用选择

结语


一、包装类(Wrapper)

1.1包装类的分类

说明:

(1)针对八种基本类型定义相应的引用类型--包装类。

(2)有了类的特点,就可以调用类中的方法

基本数据类型包装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

1.2包装类和基本数据的转换

(1)jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之拆箱。

(2)jdk5以后(含jdk5)的自动装箱和自动拆箱方式。

(3)自动装箱底层调用的是valueOf方法,例如:Integer.valueOf()

1.3案例

public class Test1 {public static void main(String[] args) {int n=10;//手动装箱  int->IntegerInteger x=Integer.valueOf(n);//手动拆箱  Integer->intint y=x.intValue();//自动装箱int a=20;  //底层调用的是 Integer.valueOf(20);Integer integer=a;//自动拆箱int a2=integer; //底层调用的是 intValue()方法}
}

1.4Integer创建机制 

请看如下代码,试着输出运行结果

public class Test2 {public static void main(String[] args) {Integer s1=new Integer(10);Integer s2=new Integer(10);System.out.println( s1==s2 );Integer n1=100;Integer n2=100;System.out.println( n1==n2 );Integer m1=128;Integer m2=128;System.out.println( m1==m2 );}
}

运行结果:false true false。

解释:

(1)对于第一种创建方式new Integer() 因为new在堆上开辟了新的空间,s1和s2是两个不同的对象,==对于引用数据类型比较的是地址,故为false.

(2)第二种创建方式

源码:

这里的cache是一个存储器,Integer类里把-128到127范围内的数字全部创建了一个对象存在cache了,所以装箱的时候在这个范围的话直接返回存储器里的对象了,不用每次都new新的堆空间。

对于n1、n2在-128~127范围内,没有开辟新的空间,故其相等;而对于m1、m2不在-128~127范围内,需要new一个空间,是两个不同的对象,故为false。

1.5Integer比较问题

  public static void main(String[] args) {Integer n1=129;int n2=129;Integer n3=129;System.out.println(n1==n2);System.out.println(n1==n3);}

结论:

(1)只要有基本数据类型int,比较的就是数值,否则为空间地址。

(2)对于Integer integer=int 装箱方式,int在-128~127范围内不会new新空间,否则将会new新空间。

(3)==比较引用数据类型比较的是空间地址是否相等。 

二、String

2.1基本介绍

(1)String对象用于保存字符串,也就是一组字符序列

(2)字符串常量对象是用双引号括起来的字符序列;

(3)字符串的字符使用Unicode字符编码,一个字符(不分字母还是汉字)占两个字节;

(4)String类的构造方法很多;

(5)String类实现了接口Serializable,即String可以串行化:可以在网络传输;

String类实现了接口Comparable,即String对象可以比较大小。

(6)String是final类,不能被其他的类继承

(7)String有属性 private final char value[],用于存放字符串内容,同时,value是一个final类型的属性,不可以被修改。

2.2 String对象的创建方式

方式一:直接赋值

String str1="hello";

方式二:调用构造器

String str2=new String("hello")

 创建机制理解:

方式一:先从常量池查看是否有"hello"数据空间,如果有,直接指向;如果没有,则重新创建,然后指向最终的常量池的空间,str1最终指向的是常量池中的地址

方式二:先在堆中创建空间,里面维护了value属性,指向常量池的"hello"数据空间,如果常量池也没有“hello”,则重新创建;如果有,直接通过value指向,str2最终指向的是堆中的空间的地址。

2.3 String比较问题

补充知识点:

(1)当调用intern方法时,如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自池的字符串。 否则,此String对象将添加到池中,并返回对此String对象的引用。即str.intern()最终返回的是常量池的地址。

(2)String类中的equals方法是重写过的,比较的是值。其源码如下:

例题:

    public static void main(String[] args) {String str1="hello";String str2=new String("hello");System.out.println(str1==str2);System.out.println(str1.equals(str2));System.out.println(str1==str2.intern());System.out.println(str2==str2.intern());}

答案为 false true true false

2.4字符串特性

2.4.1介绍

(1)String是一个final类,代表不可变的字符序列。

(2)字符串是不可变的,一个字符串对象一旦分配,其内容是不可变的。

请看如下代码,试问其分别创建了几个对象?

  String str="hello";str="world";

创建了两个对象:hello、world

String str="hello"+"world";

创建了一个对象:helloworld;

解释:String str="hello"+"world"编译时在底层优化等价于String str="helloworld"。

String a="hello";
String b="world";
String c=a+b;

创建了3个对象,其执行流程为:

2.4.2总结:

String str1="ab"+"cd;常量相加,看的是常量池;

String str2=a+b;变量相加,是在堆中

2.4.3例题

把运行结果发到评论区

public class Test6 {public static void main(String[] args) {A a = new A();a.exchange(a.str,a.ch);System.out.print(a.str+" and ");System.out.println(a.ch);}
}class A{String str="hello";final char[] ch={'j','a','v','a'};public void exchange(String str,char[]ch){str="abc";ch[0]='z';}
}

2.5 String常用方法

①equals:区分大小写,判断内容是否相等

②equalsIgnoreCase:忽略大小写,判断内容是否相等

③length:获取字符的个数,字符串长度

④indexOf:获取字符在字符串中第一次出现的索引(下标),索引从0开始,如果找不到,返回-1

⑤lastIndexOf:获取字符在字符串中最后一次出现的索引(下标),索引从0开始,如果找不到,返回-1

⑥subString:截取指定范围的字符串

⑦trim:去前后空格

⑧charAt:获取某所引出的字符,注意不能使用Str[index]这种方式

⑨replace:替换字符串中的字符

⑩compareTo:比较两个字符串的大小

⑪toCharArray:将字符串转换为字符数组

⑫format:格式字符串,%s字符串,%c字符,%d整形,%f浮点型

⑬split:分割字符串,对于某些分割字符,我们要转义,例如:\ ->\\

在使用String类方法时,有看不懂的,建议看源码(ctrl+左键进入源码)

三、StringBuffer

3.1基本介绍

(1)java.lang.StringBuffer代表可变的字符串序列,可以对字符串内容进行增删

(2)StringBuffer是个容器。

(3)很多方法与String相同,但StringBuffer是可变长度的。

3.2StringBuffer比较String

(1)String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上是更改地址,效率较低

(2)StringBuffer保存的是字符串常量,里面的值可以更改,每次StringBuffer的更新实际上可以更改内容,不用每次更新地址,效率较高。

3.3StringBuffer的构造器

(1)StringBuffer()

构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符

(2)StringBuffer(CharSequence seq)

构造一个字符串缓冲区,它包含与指定的CharSequence相同的字符

(3)StringBuffer(int capacity)

构造一个不带字符,但具有指定初始容量的字符串缓冲区,即对char[]大小进行指定

(4)StringBuffer(String str)

构造一个字符缓冲区,并将其内容初始化为指定的字符串内容

3.4String和StringBuffer相互转换

(1)String->StringBuffer

①使用构造器

String str="hello";
StringBuffer sb=new StringBuffer(str);

②使用append方法

String str="hello";
StringBuffer sb=new StringBuffer();
sb=sb.append(str);

(2)StringBuffer->String

①使用StringBuffer提供的toString方法

StringBuffer sb=new StringBuffer("hello");
String str=sb.toString();

②使用构造器

StringBuffer sb=new StringBuffer("hello");
String str=new String(sb);

3.5 StringBuffer类常见方法

①append:拼接追加字符串

②delete:删除指定字符串

③replace(start ,end,String):将start~end间的内容替换掉,不含end,即[start,end)。

④indexOf:查找子串在字符串第一次出现的索引,索引从0开始,找不到返回-1

⑤insert:在指定位置插入字符串

⑥length:获取字符的个数,字符串长度

四、StringBuilder

4.1基本介绍

(1)StringBuilder的直接父类是AbstractStringBuilder,StringBuilder实现了Serializable接口,即StringBulider的对象可以串行化;在父类中AbstractStringBuilder有属性char[]value,不是final类型,该value数组存放字符串内容,引出存放在堆中的。

(2)StringBuffer是一个final类,不能被继承

(3)因为StringBuffer字符内容是存在char[]value,所以在变化(增加/删除) 时,不用每次都更换地址(即不是每次创建新对象),所以效率高于String。

(4)StringBuilder是一个可变的字符序列,提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder线程不安全),该类被设计用作StringBuffer的一个简单替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先使用该类,现实中,它比StringBuffer快

(5)在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型数据。

(6)StringBuilder 的方法,没有做互斥的处理,即没有synchronized 关键字,因此在单线程的情况下使用

4.2 StringBuilder常用方法

StringBuilder有与StringBuffer兼容的API,可以往看StringBuffer类常见方法

4.3 String、StringBuffer、StringBuilder的比较

(1)StringBuffer和StringBuilder非常类似,均代表可变的字符序列,而且方法也一样。

(2)String是不可变字符序列,效率低,但是复用率高

(3)StringBuffer是可变字符序列,效率较高(增删),线程安全

(4)StringBuilder是可变字符序列,效率最高,线程不安全。

(5)String使用注意事项

String s="a";
s+="b;

执行上诉代码时,原来的"a"已经丢弃了,现在又产生了一个字符串s+"b"(也就是ab);

如果多次执行这些改变字符串内容的操作,会导致大量副本字符串对象留在内存中,减低效率,如果这样的操作放到循环中,会极大影响程序的性能。所以,如果我们对String做大量修改时,不要使用String.

4.4  String、StringBuffer、StringBuilder的使用选择

(1)如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder;

(2)如果字符串存在大量的修改操作,并在单线程的情况下,使用StringBuilder;

(3)如果字符串存在大量的修改操作,并在多线程的情况下,使用StringBuffer;

(4)如果字符串存在少量的修改操作,并被多个对象引用,使用String。

结语

感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!

路漫漫其修远兮,吾将上下而求索。

相关文章:

java常用类(上)

笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:javase 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一、包装类 1.1包装类…...

包管理工具npm、yarn、pnpm、cnpm详解

1. 包管理工具 1.1 npm # 安装 $ node 自带 npm# 基本用法 npm install package # 安装包 npm install # 安装所有依赖 npm install -g package # 全局安装 npm uninstall package # 卸载包 npm update package # 更新包 npm run script #…...

CI/CD是什么?

CI/CD 定义 CI/CD 代表持续集成和持续部署(或持续交付)。它是一套实践和工具,旨在通过自动化构建、测试和部署来改进软件开发流程,使您能够更快、更可靠地交付代码更改。 持续集成 (CI):在共享存储库中自动构建、测试…...

[Java]合理封装第三方工具包(附视频)

-1.视频链接 视频版: 视频版会对本文章内容进行详细解释 [Java]合理封装第三方工具包_哔哩哔哩_bilibili 0.核心思想 对第三方工具方法进行封装,使其本地化,降低记忆和使用成本 1.背景 在我们的项目中,通常会引用一些第三方工具包,或者是使用jdk自带的一些工具类 例如: c…...

常规配置、整合IDEA

目录 Redis常规配置 tcp-keepalive security Jedis RedisTemplate 连接池技术 Lua脚本 Jedis集群 Redis应用问题&解决方案 缓存穿透 缓存击穿 缓存雪崩 分布式锁 Redis实现分布式锁 Redis新功能 ACL Redis常规配置 tcp-keepalive security redis.conf中…...

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **计算每个玩家的牌型并找出赢家**9. **打印结果** 完整代码 以下游戏规则: 那…...

计算机的错误计算(一百九十二)

摘要 用两个大模型计算 csc(0.999), 其中,0.999是以弧度为单位的角度,结果保留5位有效数字。两个大模型均给出了 Python代码与答案。但是,答案是错误的。 例1. 计算 csc(0.999), 其中,0.999是以弧度为单位的角度,结…...

37 Opencv SIFT 特征检测

文章目录 Ptr<SIFT> SIFT::create示例 Ptr SIFT::create Ptr<SIFT> SIFT::create(int nfeatures 0,int nOctaveLayers 3,double contrastThreshold 0.04,double edgeThreshold 10,double sigma 1.6 );参数说明&#xff1a;nfeatures&#xff1a;类型&#x…...

Nginx界的天花板-Oracle 中间件OHS 11g服务器环境搭建

环境信息 服务器基本信息 如下表&#xff0c;本次安装总共使用2台服务器&#xff0c;具体信息如下&#xff1a; 服务器IP DNS F5配置 OHS1 172.xx.xx.xx ohs01.xxxxxx.com ohs.xxxxxx.com OHS2 172.xx.xx.xx ohs02.xxxxxx.com 服务器用户角色信息均为&#xff1a;…...

域名解析协议

一、DNS简述 ‌DNS协议是一种应用层协议&#xff0c;用于将域名转换为对应的IP地址‌&#xff0c;使得客户端可以通过域名来访问Internet上的各种资源‌ DNS的基础设施是由分层的DNS服务器实现的分布式数据库&#xff0c;它运行在UDP之上‌&#xff0c;通常使用端口号53‌ DN…...

微信小程序给外面的view设置display:flex;后为什么无法给里面的view设置宽度

如果父盒子view设置了display:flex&#xff0c;子view设置宽度值无效&#xff0c;宽度值都是随着内容多少而改变&#xff1a; 问题视图&#xff1a; 原因&#xff1a; flex布局元素的子元素&#xff0c;自动获得了flex-shrink的属性 解决方法&#xff1a; 给子view增加:fl…...

Maven怎么会出现一个dependency-reduced-pom.xml的文件

问题 今天打包时突然发现&#xff0c;多出了一个名为dependency-reduced-pom.xml的文件 解决方法 由于使用了maven-shade-plugin插件导致的&#xff0c;在 <plugin> 标签下添加 <configuration><createDependencyReducedPom>false</createDependencyR…...

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务&#xff0c;要求用户在60天内迁移账号&#xff0c;否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息&#xff1a; 1. 背景介绍&#xff1a;GitLab是一家全球知名的软件开发平台&#xff0c;提供代码托…...

自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统

在完成了HarmonyOS Camera API的开发之后&#xff0c;我开始关注更复杂的系统级功能。在浏览HarmonyOS Next文档时&#xff0c;我发现了一个非常有趣的领域&#xff1a;数字版权管理&#xff08;DRM&#xff09;。最新的DRM API 13提供了强大的工具&#xff0c;用于保护数字内容…...

Vue 3 + Element Plus 实现文件上传组件:详细解析与实现指南

Vue 3 文件上传组件实现详解 在实际的前端开发中&#xff0c;文件上传是一个常见的需求&#xff0c;尤其是在需要处理文档、图片或其他类型文件的应用中。Vue 3 结合 Element Plus UI 组件库为我们提供了一个简单且灵活的文件上传解决方案。在这篇文章中&#xff0c;我们将详细…...

qt5.12.11+msvc编译器编译qoci驱动

1.之前编译过minGW编译器编译qoci驱动,很顺利就完成了,文章地址:minGW编译qoci驱动详解,今天按照之前的步骤使用msvc编译器进行编译,直接就报错了: 查了些资料,发现两个编译器在编译时,pro文件中引用的库不一样,下面是msvc编译器引用的库,其中编译引用的库我这里安装…...

Ubuntu 20.04 安装 LNMP

1. 更新系统 sudo apt update sudo apt upgrade2. 安装 Nginx sudo apt install nginx3. 安装 MariaDB (作为 MySQL 的替代) sudo apt install mariadb-server mariadb-client初始化 MariaDB 数据库&#xff08;可选&#xff09; sudo mysql_secure_installation4. 安装 PH…...

Llama 3 简介(一)

目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练&#xff08;Over-training&#xff09; 3. 计算训练预算 4. 如何逐步估算和确定最优模型&#xff1f; 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…...

在 CentOS 上安装 FFmpeg

在CentOS 上安装 FFmpeg 方法一&#xff1a;在线安装 添加 EPEL 和 RPM Fusion 源&#xff1a; sudo yum install epel-release sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm安装 FFmpeg&#xff1a; sudo yu…...

Python------Pandas的数据结构

Pandas主要处理以下三个数据结构&#xff1a; 序列(Series) 数据帧(DataFrame) 面板(Panel) 数据结构维数描述序列11维结构&#xff0c;值可变&#xff0c;大小不变数据帧22维结构&#xff0c;值可变&#xff0c;大小可变&#xff0c;表结构面板3维标记&#xff0c;值可变…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...