0

0

完全掌握java之String类

WBOY

WBOY

发布时间:2022-05-25 13:41:33

|

1846人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于string类的相关问题,包括了字符串的常量池、字符串的不可变性等等相关内容,下面一起来看一下,希望对大家有帮助。

完全掌握java之String类

推荐学习:《java视频教程

一、认识String

1.JDK中的String

首先我们看看JDK中的String类源码,它实现了很多接口,可以看到String类被final修饰了,这就说明String类不可以被继承,String不存在子类,这样所有使用JDK的人,用到的String类都是同一个,如果String允许被继承,每个人都可以对String进行扩展,每个人使用的String都不是同一个版本,两个不同的人使用相同的方法,表现出不同的结果,这就导致代码没办法进行开发了
继承和方法覆写在带来灵活性的同时,也会带来很多子类行为不一致的问题
在这里插入图片描述

2.创建字符串的四种方式

方式一:直接赋值(常用)
String str = " hello word "

立即学习Java免费学习笔记(深入)”;

方式二:通过构造方法产生对象
String str1 = new String(" hello word ");

方式三:通过字符数组产生对象
char[] data = new char[]{‘a’ , ‘b’ ,‘c’};

方式四:通过String的静态方法valueOf(任意数据类型) = >转为字符串(常用)
String str2 = String.valueOf(10);
在这里插入图片描述

3.字符串的字面量

字面量:直接写出来的数值叫做字面量
10 – > int字面量
10.1 --> double字面量
true --> boolean字面量
" abc " – > String字面量
字符串的字面量其实就是一个字符串对象
String str = “hello word”;
String str2 = str;
此时这既是一个字符串的字面量,也是字符串的对象,为了方便理解,画个图,此时是为了方便理解我们暂时先认为它储存在堆上,其实实在方法区中存放
在这里插入图片描述
若此时让str2 = “Hello”;此时对str的输出并没有影响,因为被" "括起来的Hello也是一个字符串对象,说明此时在堆上新开辟了一块空间,而此时str2保存的就是新对象的地址空间,对str没有影响
在这里插入图片描述

4.字符串比较相等

所有的引用数据类型在比较是否相等时,使用equals方法比较,JDK的常用类,都已经覆写了equals方法,直接使用即可
引用数据类型使用 == 比较的是地址
下图是两个引用指向了同一块地址空间,和字符串的常量池有关
在这里插入图片描述
下图产生了两个对象,两块地址空间,使用==返回的就是false
在这里插入图片描述
equals的比较大小是区分大小写的比较
在这里插入图片描述
equalsIgnoreCase方法是不区分大小写的比较
在这里插入图片描述

二、字符串的常量池

1.什么是字符串常量池

在这里插入图片描述
当使用直接赋值法产生字符串对象的时候,JVM会维护一个字符串的常量池,若该对象在堆中还不存,就产生一个字符串对象加入到字符串常量池中;当继续使用直接赋值法产生字符串对象的时候,JVM发现该引用指向的内容在常量池中已经存在了,此时就不再新建字符串对象,而是直接复用已有的对象,这也是为什么上图的三个引用指向的是同一块地址
在这里插入图片描述
当第一次产生对象的时候,常量池中还什么都没有,就在常量池中产生一个字符串对象存入,当第二第三次产生对象时,JVM发现常量池中已经存在相同的内容,就不再产生新的对象,直接指向和str1相同的地址空间

在这里插入图片描述
程序都是从右向左执行的,此时第一行代码的右边就是一个字符串常量,也是一个字符串对象,所以先在常量池中开辟一块空间,然后新建一个字符串对象存入,程序再往左执行,遇到new关键字,此时新建一个对象存入堆中,然后str1 指向堆中的对象,在指向第二行第三行代码时,发现常量池中已经存在该对象,不再新建,遇到new关键字就新建对象,内存图如下:
在这里插入图片描述

兴泰网络办公系统1.61
兴泰网络办公系统1.61

基于 Internet 的 Web 技术,完全采用B/S 体系结构的网络办公系统。该系统具有安全性高、功能极为强大、可在广域网中使用也可在局域网中使用、也可以同时在局域网和广域网中使用的特点,全傻瓜式安装,无需作复杂配置,界面采用类似windows资源管理器的设计,结构清晰,条理分明,即使不熟悉电脑的人也可很快掌握全部操作。该系统通过在广域网内的广泛试用验证和经专业技术人员的调试、测试,确认具有很

下载

2.手工入池方法

String类提供的intern方法,这是一个本地方法:
在这里插入图片描述
调用intern方法会将当前字符串引用指向的对象保存到字符串常量池中,有两种情况:
1.若当前常量池中已经存在了该对象,则不再产生新的对象,返回常量池中的String对象
2.若当前常量池中不存在该对象,则将该对象入池,返回入池后的地址。

1.看一下下面这几行代码的输出
在这里插入图片描述
因为intern方法是有返回值的,此时str1只是调用了intern方法,并没有接收返回值,所以str1还是指向堆中的对象,str2指向常量池中的对象,所以返回false;
在这里插入图片描述
只要接收一下调用intern方法的返回值,就会返回true;
在这里插入图片描述
此时就将str1指向的对象手动入池了,池中已有该对象,直接让str1指向该对象
在这里插入图片描述
2.再看看下面这几行代码的输出
在这里插入图片描述
手动入池时,池中还没有任何东西,直接移入常量池中
在这里插入图片描述


三、字符串的不可变性

1.为什么不可变

注意:所谓的字符串不可变,指的是字符串的内容不可变,而不是字符串的引用不能变
在这里插入图片描述
这里的不可变指的是" hello " , " world " , " helloworld " , " !!! " , 以及拼接后的"helloworld!!!"这些已经创建好的字符串对象,这些对象一旦声明后就无法修改其内容,但是引用是可以改变的,一会指向hello,一会指向helloworld,一会指向hello world!!!,这都是可以的
在这里插入图片描述
字符串就是就是一个字符数组—> char[],字符串其实在字符数组中保存。字符串的内容为什么不能改变?我们看看字符串的源码就知道了。
在这里插入图片描述
我们可以看到String内部的字符数组是被封装起来的,String类的外部无法访问到这个字符数组,更何谈改变字符串的内容
String str = " hello ";
在这里插入图片描述

2.如何修改字符串内容

1.在运行时通过反射破坏value数组的封装
2.更换使用StringBuilder或者StringBuffer类 - - 已经不是一个类型了
a.StringBuilder:线程不安全,性能较强
b.StringBuffer:线程安全,性能较差
除此之外两个类的用法完全相同

若需要频繁的进行字符串的拼接,使用StringBuilder类的append方法,这里只产生了一个对象,一会变成hello,一会变成hello world
在这里插入图片描述

3.StringBuilder类的具体使用

StringBuilder类和String是两个独立的类,StringBuilder类就是为了解决字符串的拼接问题产生的
StringBuilder类和String类的相互转换:

1.StringBuilder变为String类调用toString方法即可
在这里插入图片描述

2.String类转变为StringBuilder类,使用StringBuilder的构造方法或者append方法
在这里插入图片描述
在这里插入图片描述
其他常用方法:
a.字符串的反转操作,sb提供的reverse();
在这里插入图片描述

b.删除指定范围的数据,delete(int start,int end);删除从start开始,到end之前的所有内容,左闭右开区间
在这里插入图片描述

c.插入操作,insert(int start,各种数据类型):从start索引位置开始插入,插入的起始索引为start
在这里插入图片描述

推荐学习:《java视频教程

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

805

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

724

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

727

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

395

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

445

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

428

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16861

2023.08.03

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.1万人学习

C# 教程
C# 教程

共94课时 | 5.7万人学习

Java 教程
Java 教程

共578课时 | 39.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号