从0开始学JAVA-2 String和char的区别

Java 中Stringchar的区别,核心是它们一个是表示 "一串字符" 的类 ,一个是表示 "单个字符" 的基本数据类型,我会从定义、用法、核心特性等维度详细拆解,结合例子让你一目了然:

一、核心定义与本质区别

特性 char(字符) String(字符串)
数据类型分类 基本数据类型(8 种之一,是关键字) 引用数据类型(String 类,不是关键字)
表示内容 单个 Unicode 字符(仅 1 个字符) 一串字符的序列(0 个或多个字符)
底层存储 占用 2 个字节(存储字符的 Unicode 编码) 底层是char[]数组(JDK9 后改为byte[]),是对象
写法 / 字面量 单引号包裹,如'a''1''中' 双引号包裹,如"a""123""中国"""(空字符串)

二、关键用法差异(结合代码例子)

1. 声明与赋值

java

运行

复制代码
// char:只能存单个字符,必须用单引号
char c1 = 'a'; // 正确
char c2 = '1'; // 正确
char c3 = '中'; // 正确
// char c4 = "a"; // 错误:char不能用双引号
// char c5 = 'ab'; // 错误:char只能存1个字符

// String:存任意长度字符(包括0个),必须用双引号
String s1 = "a"; // 正确(单个字符的字符串)
String s2 = "abc123"; // 正确(多字符)
String s3 = ""; // 正确(空字符串,长度为0)
// String s4 = 'a'; // 错误:String不能用单引号
2. 长度与空值表示

java

运行

复制代码
// char:无"长度"概念,也没有"空值"------必须存一个字符(哪怕是空格)
char c = ' '; // 空格也是一个有效字符
// char c = ''; // 错误:单引号内必须有且仅有1个字符

// String:有长度(可通过length()方法获取),支持空字符串
String s1 = "hello";
System.out.println(s1.length()); // 输出5(字符个数)
String s2 = "";
System.out.println(s2.length()); // 输出0(空字符串)
String s3 = null; // 特殊:引用类型可以为null(表示没有对象)
3. 可变性
  • char :是基本类型,值可直接修改(可变):

    java

    运行

    复制代码
    char c = 'a';
    c = 'b'; // 正确:直接修改值
  • String :是不可变对象(一旦创建,内容不能修改):

    java

    运行

    复制代码
    String s = "hello";
    s = "world"; // 看似修改,实际是创建了新的String对象,原"hello"仍存在
    s.concat("!"); // 调用方法拼接,原字符串不变,需接收返回值才生效
    String newS = s.concat("!"); // newS = "world!",s还是"world"
4. 常用操作

java

运行

复制代码
// char:仅能做简单的字符判断/转换
char c = 'A';
// 转小写
char lowerC = Character.toLowerCase(c); // 'a'
// 判断是否是数字
boolean isNum = Character.isDigit('9'); // true

// String:拥有大量实用方法(因为是类)
String s = "Hello World";
// 转小写
String lowerS = s.toLowerCase(); // "hello world"
// 截取子串
String sub = s.substring(0, 5); // "Hello"
// 分割字符串
String[] arr = s.split(" "); // ["Hello", "World"]
// 替换字符
String replace = s.replace("World", "Java"); // "Hello Java"

三、使用场景区分

  • 用 char 的场景 :只需要处理单个字符时,比如:判断用户输入的单个验证码字符、遍历字符串的每一个字符、定义字符常量(如char SEPARATOR = ',')。
  • 用 String 的场景:处理任意长度的文本时,比如:用户名、密码、文章内容、接口返回的文本数据等,几乎所有 "文本" 场景都用 String。

四、补充:char 和 String 的相互转换

java

运行

复制代码
// 1. char → String
char c = 'a';
String s1 = String.valueOf(c); // 推荐:"a"
String s2 = c + ""; // 简便写法(本质是拼接空字符串)

// 2. String → char
String s = "abc";
char c1 = s.charAt(0); // 获取第0个字符:'a'
char[] charArr = s.toCharArray(); // 转成char数组:['a','b','c']

总结

  1. char基本数据类型,存单个字符,用单引号,可变;
  2. String引用数据类型(类),存一串字符,用双引号,不可变,有丰富的操作方法;
  3. 记住核心:char是 "单个字符",String是 "字符序列",写法上单 / 双引号是最直观的区分点。
相关推荐
一只爱学习的小鱼儿几秒前
使用QT编写粒子显示热力图效果
开发语言·qt
2301_81665122几秒前
C++中的策略模式高级应用
开发语言·c++·算法
jgyzl1 分钟前
2026.3.20 用EasyExcel实现excel报表的导入与导出
java·python·excel
liuyao_xianhui2 分钟前
优选算法_模拟_替换所有的‘?‘_C++
开发语言·javascript·数据结构·c++·算法·链表·动态规划
Javatutouhouduan3 分钟前
SpringBoot如何快速精通?
java·spring boot·mybatis·java面试·后端开发·java编程·java程序员
笨笨马甲3 分钟前
Qt 人脸识别
开发语言·qt
iPadiPhone6 分钟前
破茧成蝶:从底层内核到 Java NIO/AIO 异步架构全解析
java·架构·nio
菜鸟小九11 分钟前
hot100(81-90)
java·数据结构·算法
皙然11 分钟前
线上问题定位与排查实战:从日志到优化的完整思路
java·jvm
Riemann~~15 分钟前
ros2写一个可以修改参数的node
开发语言·python·ros2·机器人系统