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

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']

总结

  1. char是基本数据类型,存单个字符,用单引号,可变;
  2. String是引用数据类型(类),存一串字符,用双引号,不可变,有丰富的操作方法;
  3. 记住核心:char是 "单个字符",String是 "字符序列",写法上单 / 双引号是最直观的区分点。
相关推荐
马优晨2 分钟前
Java中的dto是什么
java·开发语言·java中的dto是什么·java的dto是什么·dto在java中是什么
小蒜学长7 分钟前
基于Springboot+Vue的高校教师教学业绩综合管理系统的设计与开发(代码+数据库+LW)
java·数据库·spring boot·后端·教学业绩管理·三级权限
Mikko79 分钟前
Spring Boot 3.5.16 自带的 Tomcat 10.1.55 中了哪些 CVE?其中一条是修上一个漏洞时带进来的
java·spring boot·后端·安全·tomcat
十年Java程序媛13 分钟前
Java 内部类全解|成员 / 静态 / 匿名内部类,理清和 Lambda 的区别
java·spring boot·面试
itmigrate14 分钟前
PHP 导出大 CSV 时内存溢出的一次排查
android·开发语言·php
SL_staff25 分钟前
报工≠打卡:从任务报工到闭环管控的5个数据断点排查清单
java·spring boot·全栈
tryxr28 分钟前
如何优化sql
java·数据库·sql·数据库优化
YSL07012434 分钟前
一文通关-----栈和队列
开发语言·数据结构
SamDeepThinking36 分钟前
配货单发货数为空告警误报治理:写表延迟复核方案
java·后端·架构
\光辉岁月/43 分钟前
16.JavaSE-反射
java·反射