从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是 "字符序列",写法上单 / 双引号是最直观的区分点。
相关推荐
huluang2 小时前
高性能Word文档批注处理器的设计与实现
开发语言·c#·word
林恒smileZAZ2 小时前
总结 Next.js 中的 Server Actions
开发语言·javascript·ecmascript
Han.miracle2 小时前
SpringBoot前后端交互实战案例:加法计算器与用户登录
java·开发语言
前端小天才2 小时前
element-ui图标偶现乱码问题的原因和修复方法
开发语言·ui·rust
Biehmltym2 小时前
【AI】01开发环境:Conda_python包/环境管理,10分钟上手
开发语言·python·conda
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于SpringBoot的专业分流系统为例,包含答辩的问题和答案
java·spring boot·后端
java硕哥2 小时前
Spring与SpringBoot的重要接口及核心概念
java·spring boot·spring
小镇学者2 小时前
【golang】goland使用多版本go sdk的方法
开发语言·后端·golang
lynnlovemin2 小时前
Java技术研发年度深度总结:从架构优化到工程实践的破局之路
java·开发语言·架构·年度总结