从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是 "字符序列",写法上单 / 双引号是最直观的区分点。
相关推荐
知南x10 分钟前
【Ascend C系列课程(高级)】(1) 算子调试+调优
c语言·开发语言
忆~遂愿12 分钟前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
Ro Jace38 分钟前
计算机专业基础教材
java·开发语言
代码游侠1 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
mango_mangojuice1 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
程序员侠客行1 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
devmoon1 小时前
运行时(Runtime)是什么?为什么 Polkadot 的 Runtime 可以被“像搭积木一样”定制
开发语言·区块链·智能合约·polkadot·runtmie
时艰.1 小时前
Java 并发编程 — 并发容器 + CPU 缓存 + Disruptor
java·开发语言·缓存
丶小鱼丶1 小时前
并发编程之【优雅地结束线程的执行】
java
市场部需要一个软件开发岗位1 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全