Java 中String和char的区别,核心是它们一个是表示 "一串字符" 的类 ,一个是表示 "单个字符" 的基本数据类型,我会从定义、用法、核心特性等维度详细拆解,结合例子让你一目了然:
一、核心定义与本质区别
| 特性 | 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']
总结
char是基本数据类型,存单个字符,用单引号,可变;String是引用数据类型(类),存一串字符,用双引号,不可变,有丰富的操作方法;- 记住核心:
char是 "单个字符",String是 "字符序列",写法上单 / 双引号是最直观的区分点。