0

0

java的String类如何使用

WBOY

WBOY

发布时间:2023-04-19 13:19:03

|

1986人浏览过

|

来源于亿速云

转载

java的String类如何使用

一、认识String

1.JDK中的String

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

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

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

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

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

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

方式四:通过String的静态方法valueOf(任意数据类型) = >转为字符串(常用)
String str2 = String.valueOf(10);
java的String类如何使用

3.字符串的字面量

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

4.字符串比较相等

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

二、字符串的常量池

1.什么是字符串常量池

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

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

2.手工入池方法

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

Shopxp网上购物系统
Shopxp网上购物系统

Shopxp购物系统历经多年的考验,并在推出shopxp免费购物系统下载之后,收到用户反馈的各种安全、漏洞、BUG、使用问题进行多次修补,已经从成熟迈向经典,再好的系统也会有问题,在完善的系统也从在安全漏洞,该系统完全开源可编辑,当您下载这套商城系统之后,可以结合自身的技术情况,进行开发完善,当然您如果有更好的建议可从官方网站提交给我们。Shopxp网上购物系统完整可用,无任何收费项目。该系统经过

下载

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


三、字符串的不可变性

1.为什么不可变

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

2.如何修改字符串内容

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

若需要频繁的进行字符串的拼接,使用StringBuilder类的append方法,这里只产生了一个对象,一会变成hello,一会变成hello world
java的String类如何使用

3.StringBuilder类的具体使用

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

1.StringBuilder变为String类调用toString方法即可
java的String类如何使用

2.String类转变为StringBuilder类,使用StringBuilder的构造方法或者append方法
java的String类如何使用
java的String类如何使用
其他常用方法:
a.字符串的反转操作,sb提供的reverse();
java的String类如何使用

b.删除指定范围的数据,delete(int start,int end);删除从start开始,到end之前的所有内容,左闭右开区间
java的String类如何使用

c.插入操作,insert(int start,各种数据类型):从start索引位置开始插入,插入的起始索引为start
java的String类如何使用

相关文章

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

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

下载

相关标签:

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

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

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

精品课程

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

共23课时 | 2.5万人学习

C# 教程
C# 教程

共94课时 | 6.6万人学习

Java 教程
Java 教程

共578课时 | 45.6万人学习

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

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