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

Java 字符串

Java 字符串

字符串(String)属于引用数据类型,在 Java 程序中广泛使用。我们在第一个 Java 程序里就接触过字符串,如打印语句 System.out.println("Hello World"); 中的 "Hello World" 就是一个字符串。本小节将介绍字符串的基础知识,包括创建字符串(含 Java 13 支持的多行字符串创建方法及注意事项)、字符串的连接操作,还会着重讨论字符串的不可变性。需要注意的是,Stringjava.lang 包中的内置类,其相关操作涉及面向对象知识,本小节暂不讨论,后续会专门讲解。

1. 什么是字符串

字符串(string)是由零个或多个字符组成的有限序列,是编程语言中表示文本的数据类型,简单来说就是一串字符。

2. 创建字符串

2.1 创建字符和字符串

提到字符串,容易联想到字符。回忆已学的字符类型 char,创建字符示例如下:

// 依次创建三个字符 C S D N
char c1 = 'C';
char c2 = 'S';
char c3 = 'D';
char c4 = 'N';

char 类型不同,String 类型使用双引号表示字符串(如 "字符串文字")。以下是创建字符串的示例:

public class StringTest1 {
    public static void main(String[] args) {
        // 创建一个空字符串
        String str1 = "";
        // 创建一个只包含一个字符的字符串
        String str2 = "q";
        // 创建包含多个字符的字符串
        String str3 = "CSDN is great!";
        // 依次打印它们
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }
}

运行结果:

q
CSDN is great!

字符串可以声明为空,所以第一行打印空行。

2.2 创建多行字符串

自 Java 13 以后,可使用三引号表示多行字符串,官方称为“文本块”,常用于表示多行或大段文字。示例如下:

public class StringTest3 {
    public static void main(String[] args) {
        String str = """
            Java 很棒!
            很棒!!
            能够在 CSDN 学 Java 更棒!!!""";
        System.out.println(str);
    }
}

注意事项:文本块中起始的三引号后面要另起一行,以下写法错误:

String str = """Java 很棒!
很棒!!
能够在 CSDNJava 更棒!!!""";

若直接使用 javac 命令编译代码会报错:

javac StringTest3.java
StringTest3.java:4: 错误: 文本块 是预览功能,默认情况下禁用。
        String str = """
                     ^
  (请使用 --enable-preview 以启用 文本块)
1 个错误

可给编译器加参数编译执行代码:

$ javac -source 14 --enable-preview StringTest3.java
$ java --enable-preview StringTest3
Java 很棒!
很棒!!
能够在 CSDN 学 Java 更棒!!!

3. 字符串的连接

可使用加法运算符 + 将字符串和任意其他数据类型进行连接操作。

连接多个字符串
public class StringJoinTest1 {
    public static void main(String[] args) {
        // 定义两个字符串
        String str1 = "Hello";
        String str2 = "";
        // 将字符串str1连接一个空格,再连接str2,最后再连接一个感叹号
        String str3 = str1 + " " + str2 + "!";
        System.out.println(str3);
    }
}

运行结果:

Hello !
字符串与其他类型值连接
public class StringJoinTest2 {
    public static void main(String[] args) {
        // 定义整型变量 age
        int age = 12;
        // 定义浮点型变量 height
        float height = 132.5f;
        // 定义一个字符串变量 name
        String name = "小明";
        // 将上面三个变量连接,拼成一个更长的字符串
        String result = name + "今年" + age + "岁了," + "他在 CSDN 学习,身高为" + height + "cm";
        System.out.println(result);
    }
}

运行结果:

小明今年12岁了,他在 CSDN 学习,身高为132.5cm
运算符优先级示例
public class StringJoinTest3 {
    public static void main(String[] args) {
        // 定义两个整型变量a、b
        int a = 100;
        int b = 200;
        // 打印一个空字符串+a+b的值
        System.out.println("" + a + b);
    }
}

运行结果:

100200

结果未打印 300 的原因是:按照从左到右的执行顺序,(空字符串 + 数值 100)的运算结果是字符串 100,再运算(字符串 100 + 数值 200),最终结果为字符串 100200。由于运算中有字符串存在,+ 运算符用于字符串连接而非数值计算。若将表达式操作数倒过来(即 b + a + ""),会先进行数值加法运算得到 300,再与空字符串连接,结果为字符串 "300"

4. 字符串的不可变性

字符串有一个重要特性:不可变性,即字符串一经创建便无法修改。示例如下:

public class StringTest4 {
    public static void main(String[] args) {
        // 创建一个字符串 str
        String str = "hello CSDN!";
        // 对 str 重新赋值
        str = "Java is great!";
        System.out.println(str);
    }
}

运行结果:

Java is great!

有人可能疑惑,说字符串一旦创建无法修改,为何 str 变量能被赋新值?实际上,变量 str 本身未修改,而是其“指向”被修改了。代码执行流程为:先创建 str 指向 "hello CSDN!",对 str 重新赋值时,在内存中先创建字符串 "Java is great",然后改变变量 str 的指向,原来的 "hello CSDN!" 并未改变。

5. 小结

通过本小节学习,我们了解到字符类型 char 是基本数据类型,字符串类型 String 是引用类型。创建字符串可使用双引号,Java 13 起支持多行字符串表示方法。字符串连接操作使用加法运算符实现。要特别注意字符串的不可变性,这在面试中常被考查。

相关文章:

  • 51c大模型~合集69
  • 最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程
  • 简单易懂,解析Go语言中的Map
  • Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
  • postman调用ollama的api
  • REACT学习DAY02(恨连接不上服务器)
  • 垃圾回收知识点
  • 3.12 企业级智能文档引擎:从技术手册到产品报告的全链路自动化实践指南
  • 超简单理解KMP算法(最长公共前后缀next数组、合并主子串、子串偏移法)
  • QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,压缩进度
  • Minio分布式多节点多驱动器集群部署
  • 如何使用Python快速开发一个带管理系统界面的网站-解析方案
  • 基于Python+Django+Vue的旅游景区推荐系统系统设计与实现源代码+数据库+使用说明
  • 游戏引擎学习第111天
  • Unity结合Vuforia虚拟按键实现AR机械仿真动画效果
  • ArcGIS Pro进行坡度与坡向分析
  • 【Leetcode 每日一题】2209. 用地毯覆盖后的最少白色砖块
  • 多模态情感分析
  • ArcGIS Pro制作人口三维地图教程
  • 深度学习(2)-深度学习关键网络架构
  • 种植耐旱作物、启动备用水源,甘肃各地多举措应对旱情
  • 经济日报:人工智能开启太空经济新格局
  • 杨建全已任天津市委副秘书长、市委市政府信访办主任
  • 首映|《星际宝贝史迪奇》真人电影,不变的“欧哈纳”
  • 俄乌谈判开始
  • 国家统计局向多省份反馈统计督察意见