游乐游手机版
首页/编程语言/文章详情

JAVA中String类的使用方法示例讲解

时间:2026-05-05 09:34
1、前言 在Ja va编程的世界里,String类是我们打交道最频繁的伙伴之一,几乎每个项目都离不开它。今天,我们就来系统地梳理一下这个核心类的使用门道。 整个脉络可以清晰地分为三步:先从如何创建String对象讲起,然后深入探讨字符串之间如何正确比较,最后再盘点一批最实用的常用方法。跟着这个思路走

1、前言

在Ja va编程的世界里,String类是我们打交道最频繁的伙伴之一,几乎每个项目都离不开它。今天,我们就来系统地梳理一下这个核心类的使用门道。

整个脉络可以清晰地分为三步:先从如何创建String对象讲起,然后深入探讨字符串之间如何正确比较,最后再盘点一批最实用的常用方法。跟着这个思路走下来,你就能稳稳地掌握String类的基本功了。

2、String的使用

2.1 创建String

创建String对象的方式多种多样,下面这几种是最常用的,可以应对大部分场景。

这里有个细节值得注意:如果打算通过byte数组来创建字符串,那么数组里的单个数值最好不要超过127。原因在于,这个过程依赖ASCII码表进行转换,超出范围可能会导致非预期的字符结果。

//        方式一:直接赋值
        String string01 = "zjx";
//        方式二:通过构造方法传入字面量
        String string02 = new String("zjx");
//        方式三:通过字符数组构建
        String string03 = new String(new char[]{'z','j','x'});
//        方式四:通过字节数组构建(ASCII码转换)
        String string04 = new String(new byte[]{97,98,99});
//        方式五:通过字节数组和索引构建部分内容
        String string05 = new String(new byte[]{97,98,99},0,2);
//        方式六:通过字符数组和索引构建部分内容
        String string06 = new String(new char[]{'z','j','x'},0,2);

上面这些只是部分例子,String类提供的构造方法其实相当丰富,下图展示了一个更全面的视图:

JA VA中String类的使用方法示例讲解

2.2 String之间的比较

2.2.1 比较方式

说到比较两个字符串是否相等,绝大多数情况下,都应该使用Stringequals方法。直接用“==”操作符比较的是对象引用地址,那可不是我们想要的内容对比。

2.2.2 equals详解

那么,equals方法内部到底是怎么工作的呢?它的判断逻辑其实非常严谨,可以拆解为以下几个步骤:

第一步,判断比较对象是不是自己本身。如果是,直接返回true,省去后续所有步骤。

第二步,判断传入的对象是不是String类型。如果不是,二话不说,返回false

第三步,这里涉及到一个底层优化细节:字符串压缩功能是否被禁用。这个开关会影响后续的比较路径。

第四步,如果启用了压缩功能,那么仅当两个字符串的编码格式完全相同时,比较才会继续,否则返回false

第五步,也是最终裁决的一步:逐位比对两个String对象底层的存储数组。这个数组就是下面这行代码所定义的:

@Stable
private final byte[] value;   //字符串的实际存储载体

只有当这两个byte[] value的内容完全一致时,equals方法才会返回true。整个流程的示意图如下,可以帮助你更直观地理解:

JA VA中String类的使用方法示例讲解

2.3 常用方法

理论讲清楚了,咱们再来看看实战。下面这些是String类中间出场率极高的一批方法,几乎每天都会用到:

//        equals:区分大小写的内容比较
        System.out.println("zjx 与 ZJX :" + "zjx".equals("ZJX"));
//        equalsIgnoreCase:忽略大小写的内容比较
        System.out.println("zjx 与 ZJX :" + "zjx".equalsIgnoreCase("ZJX"));
//        length:获取字符串长度
        System.out.println("zjx".length());
//        indexOf:查找字符首次出现的索引(找不到则返回-1)
        System.out.println("zjxzjx".indexOf("z"));
//        lastIndexOf:查找字符最后一次出现的索引
        System.out.println("zjxzjx".lastIndexOf("z"));
//        split:按指定字符分割字符串
        System.out.println("zjxzjx".split("z").length);
//        substring:截取子串(从起始索引到结束索引前一位)
        System.out.println("zjxzjx".substring(1,2));
//        trim:去除字符串首尾的空格
        System.out.println(" zjxzjx ".trim());
//        charAt:获取指定索引位置的字符
        System.out.println("zjx".charAt(1));

3、结束语

最后,分享两个在实践中非常有用的小技巧。

第一,像"zjx"这样的字符串字面量,本身就是一个String对象,可以直接调用所有方法。在进行equals比较时,如果其中一方是固定的字面量,强烈推荐用字面量来调用方法。例如,写成"zjx".equals(variable),而不是variable.equals("zjx")。这样可以有效避免当variablenull时引发的空指针异常。

第二,务必牢记String的不可变性。任何看似修改字符串的操作,比如concatsubstring或者trim,其实都返回了一个全新的String对象,原来的对象丝毫未变。你所看到的“变化”,只不过是对象的引用指向了新的地址而已。理解这一点,对于编写高效、正确的字符串处理代码至关重要。

来源:https://www.jb51.net/program/363203uyr.htm
上一篇Node.js在Ubuntu上的安全性怎样 下一篇Java多语言切换实现方法(不用重启,不换代码,10秒搞定!)
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CentOS与Golang打包常见兼容性问题探讨
编程语言 · 2026-07-01

CentOS与Golang打包常见兼容性问题探讨

CentOS与Golang打包的兼容性问题集中在glibc版本不匹配、交叉编译环境变量错误、依赖库缺失及Go依赖管理不规范。可通过Docker容器编译、选择兼容Go版本、正确设置GOOS GOARCH环境变量、安装对应开发包及使用GoModules解决。

CentOS中Fortran与Python如何协同工作从入门到实战完整教程
编程语言 · 2026-07-01

CentOS中Fortran与Python如何协同工作从入门到实战完整教程

在CentOS中,Fortran与Python可通过f2py、SWIG、共享库调用或subprocess协同。f2py封装Fortran为Python模块,支持数组运算;共享库需手动对齐数据类型;系统调用适合独立计算。

CentOS中Golang打包优化方法
编程语言 · 2026-07-01

CentOS中Golang打包优化方法

在CentOS中优化Golang编译打包,可显著提升编译速度并减小二进制文件体积。关键技巧包括:设置环境变量、使用Go模块管理依赖、编译时添加-ldflags= "-s-w "去除调试信息、利用UPX工具压缩、运行strip清理符号表,以及优化cgo内C代码的编译选项。综合运用这些方法能有效优化最终程序。

在CentOS系统中cpustat与其他工具协同使用的完整方法
编程语言 · 2026-07-01

在CentOS系统中cpustat与其他工具协同使用的完整方法

cpustat作为sysstat包的CPU监控工具,可通过管道与grep等命令配合过滤数据,利用脚本自动记录带时间戳的日志,或结合图形工具查看,也可格式化输出后接入Zabbix、Grafana等Web监控系统,实现可视化与告警。

CentOS中readdir与其他Linux发行版的差异
编程语言 · 2026-07-01

CentOS中readdir与其他Linux发行版的差异

CentOS基于RHEL,与Ubuntu、Debian、Fedora在包管理器(yum dnfvsapt)、默认文件系统(XFSvsext4)等存在差异,但readdir等系统调用遵循POSIX标准,行为一致。