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

[Java 基础]String 类

字符串是编程中最常用的数据类型,在 Java 中,字符串不是基本数据类型,而是一个类,位于 java.lang 包中。这意味着我们可以像操作其他对象一样操作字符串。String 类提供了丰富的方法,用于创建、比较、连接、截取、查找和修改字符串等操作。

创建一个 String 字符串对象,最直接、最常用的方法就是将字符串用双引号括起来赋值给 String 类型的变量。

String message = "Hello Java!";
String name = "小明";
String empty = ""; // 空字符串

String 对象有一个非常重要的特性是不可变性 (Immutability),这意味着一旦一个 String 对象被创建,它的内容就不能被修改。任何看似修改字符串的操作,实际上都会创建一个新的 String 对象。让我们通过一个例子来理解:

public class StringImmutableDemo {public static void main(String[] args) {String str1 = "Hello";String str2 = str1; // str2 指向 str1 相同的对象System.out.println("修改前:");System.out.println("str1 = " + str1);System.out.println("str2 = " + str2);// 尝试修改 str1str1 = str1 + " World"; // 实际上是创建了一个新的字符串对象System.out.println("\n修改后:");System.out.println("str1 = " + str1);System.out.println("str2 = " + str2);}
}

上面的代码的执行结果是:

如果 String 是可变的,那么当 str1 = str1 + " World" 执行时,它会直接修改 str1 原来指向的那个 “Hello” 对象的内容,变成 “Hello World”。由于 str2 最初也指向同一个对象,那么在修改后,str2 的值也应该变成 “Hello World”。

但是,实际运行结果是 str2 的值保持不变(仍然是 “Hello”)。这明确地表明,对 str1 执行的连接操作并没有改变原始的 “Hello” 字符串对象。它只是让 str1 指向了一个全新的字符串对象,而 str2 仍然指向那个未被修改的原始 “Hello” 对象。

String 类的常用方法

length

返回字符串的长度(包含的字符数)。

String message = "Hello";
int length = message.length(); // length 的值为 5

charAt

返回指定索引位置的字符。索引从 0 开始。

String word = "Java";
char firstChar = word.charAt(0); // firstChar 的值为 'J'
char lastChar = word.charAt(3);  // lastChar 的值为 'a'

concat

将指定的字符串连接到该字符串的末尾,返回一个新的字符串。

String str1 = "Hello";
String str2 = " World";
String result = str1.concat(str2); // result 的值为 "Hello World"

substring

返回一个新的字符串,它是此字符串从 beginIndex 开始到末尾的子字符串,它还有一个有两个参数的方法,指定截取的起始下标和截取的长度。

String text1 = "Programming";
String sub1 = text1.substring(4); // sub1 的值为 "ramming"String text2 = "Programming";
String sub2 = text2.substring(0, 4); // sub2 的值为 "Prog"

equals

将此字符串与指定的对象进行比较。只有当对象也是一个 String 并且包含与此字符串相同的字符序列时,结果才为 true

String s1 = "Hello";
String s2 = "Hello";
String s3 = new String("Hello");
System.out.println(s1.equals(s2)); // 输出 true
System.out.println(s1.equals(s3)); // 输出 true
System.out.println(s1 == s3);     // 输出 false (比较的是对象的引用)

:::color3
比较字符串内容是否相等应该使用 equals() 方法,而不是 == 运算符。== 运算符比较的是两个对象的引用是否指向同一个内存地址。

:::

toLowerCase 和 toUpperCase

将字符串全部小写或全部大写。

String upperCase = "HELLO";
String lowerCase = upperCase.toLowerCase(); // lowerCase 的值为 "hello"
String lowerCase2 = "world";
String upperCase2 = lowerCase2.toUpperCase(); // upperCase2 的值为 "WORLD"

equalsIgnoreCase

忽略大小写进行比较两个字符串内容是否相等。

String strA = "java";
String strB = "Java";
System.out.println(strA.equalsIgnoreCase(strB)); // 输出 true

trim

返回一个新的字符串,它是此字符串删除了前导和尾部空白的副本。

String stringWithSpaces = "   Extra spaces   ";
String trimmedString = stringWithSpaces.trim(); // trimmedString 的值为 "Extra spaces"

split

根据给定的正则表达式将此字符串拆分为字符串数组。

String data = "apple,banana,orange";
String[] fruits = data.split(","); // fruits 的值为 ["apple", "banana", "orange"]

基本上 String 类提供的这些方法够用,但是一些三方包中提供了额外的非常好用的关于字符串的一些工具类,比如: Apache Commons Lang - StringUtils这个类。

相关文章:

  • Java NIO详解:新手完全指南
  • 【技巧】dify前端源代码修改第一弹-增加tab页
  • python打卡day49@浙大疏锦行
  • 逻辑回归暴力训练预测金融欺诈
  • 电路图识图基础知识-远程/本地启停电动机(二十一)
  • 记录一篇HTTPS的文章
  • 如何让hustoj支持Java判题
  • 开放词汇检测分割YOLOE从pytorch到caffe
  • Spring状态机
  • Docker简述
  • React Hooks 的原理、常用函数及用途详解
  • Python打卡训练营学习记录Day49
  • 【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
  • 2025年渗透测试面试题总结-小鹏[社招]车联网工程师(题目+回答)
  • 云南净餐馆备考单选题及答案
  • Ⅳ.计算机二级选择题(函数)
  • 前端开发面试题总结-vue2框架篇(一)
  • C++实现分布式网络通信框架MPRPC(1)--预备知识
  • DL00871-基于深度学习YOLOv11的盲人障碍物目标检测含完整数据集
  • 分布式光纤声振传感技术原理与瑞利散射机制解析
  • 泰州网站制作案例/百度企业
  • 做一个网站以及app多少钱/百度指数是搜索量吗
  • 90后做网站/百度官方网站网址是多少
  • 公司做网站要注意什么/宁波网络营销怎么做
  • 瑞安网站建设/创建网站步骤
  • 什么网站做家电测评/最近时事热点