字符型char在Java语言中占用 2 个字节,char类型的字面量必须使用半角的单引号括起来,取值范围为[ 0 - 65535 ],char 和 short 都占用 2 个字节,但是 char 可以取到更大的正整数,因为 char 类型没有负数。

Java语言中的char类型变量可以容纳一个汉字。请看以下程序:

public class CharTest01 {public static void main(String[] args) {char c = '中';System.out.println(c);}
}

我们对以上的程序编译并运行,请看下图结果:

我们可以看到 Java 中的 char 类型确实可以储存一个汉字。我们再来看以下程序,假设字符我们采用双引号括起来会怎么样:

public class CharTest01 {public static void main(String[] args) {char c = "中";System.out.println(c);}
}

我们对以上的程序进行编译,请看下图编译结果:

我们看到编译器报错了,并且提示的错误信息是 “不兼容的类型” ,这是因为双引号括起来的不是 char 类型,而是 String 类型,其实 String 类型就是 Java 中的字符串类型,但大家要知道字符串不属于基本数据类型,而是引用数据类型,所以类型不兼容。接下来我们来测试一下两个或多个字符是否可以使用单引号括起来,请看以下代码:

public class CharTest01 {public static void main(String[] args) {char c = 'ab';System.out.println(c);}
}

我们对以上的程序进行编译,请看下图编译结果:

我们可以看出,编译器报错了,错误信息是“未结束的字符文字”,这是因为 Java 中有规定,字符型只能是单个字符,当编译器检测到 ' ab ' 的时候,左边以单引号开始,继续检测到 a字符,然后编译器会继续检查下一个字符是否为另一半单引号,结果不是,而是 b,所以编译器报错了。这也说明了 Java 中的字符只能是单个字符,不能是多个字符

接下来,我们再来看一看关于转义字符,转义字符指用一些普通的字符组合代表一些特殊的字符,由于组合用的字符改变了原意,称为转义字符。Java 中的转义字符以 \ 开始,常见的转义字符有:\t、\n、\u、\\、\',\",其中\t 代表制表符,\n 是换行符,\\表示一个普通的\字符,\'表示一个普通的',\"表示一个普通的"。请看以下代码:

public class CharTest02 {public static void main(String[] args) {char c1 = 't';System.out.println("这是一个普通的字符 = " + c1);char c2 = '\t';System.out.println("abc" + c2 + "def");}
}

我们对以上的程序进行编译并运行,请看下图结果:

对于以上程序,表面看起来 ' \t ' 是由两个字符构成,按说应该编译报错,因为它毕竟是两个字组成的字符串,可是最终的结果编译通过了,并且正常运行了,这说明了 ' \t ' 表示 1 个字符,所以 \ 具有转义功能,根据以上输出结果可以看出 \t 是制表符(abc 和 def 之间的空白就是制表符)。接下来我们来看一看其它的转义字符。请看以下程序:

public class CharTest03 {public static void main(String[] args) {System.out.println("hello\nworld");System.out.println('\'');System.out.println('\\');System.out.println("\"");System.out.println('\u4e2d');}
}

我们对以上的程序进行编译并运行,请看下图运行结果:

通过以上代码的测试,hello 和 world 之间换行了,所以 \n 代表一个换行符。

对于以上代码的第 4 行 ' \' ' 来说,这里的 \ 是不能去掉的,如果去掉之后代码就变成了 ' ' ',那么此时编译器会报错,因为单引号 ' 在 Java 中有特殊含义,在这个 ' ' ' 代码当中第一个单引号 ' 会主动和第二个单引号 ' 配对,此时最后的单引号 ' 就是多余的了,不符合 Java 的语法,所以会导致编译错误。如果这个时候在第二个单引号 ' 前面添加 \ 进行转义,代码是 ' \' ',那么此时第二个单引号 \' 就是一个不具备特殊含义的普通单引号字符,这个时候第一个单引号 ' 会和最后一个单引号 ' 配对。编译和运行就正常了。

对于以上代码第 6 行来说和第 4 行的原理是相同的,代码 \" 表示普通的双引号字符。

对于第 5 行代码来说,代码 \\ 联合起来表示一个普通的 \ 字符,在 Java 中 1 个 \ 字符不是普通的 \ 字符,具有特殊的作用就是转义,我们想让其变成一个普通的 \ 字符需要使用两个 \ 来表示,代码 \\ 中,第一个 \ 具有转义功能,第一个 \ 将第二个 \ 转换成普通的 \ 字符,以此类推,如果代码是 \\\\ 这样,则表示结果是 \\。

对于第 7 行代码来说,如果代码修改为 ' u4e2d ' 必然报错,因为 u4e2d 在这个时候是一个普通的字符串,字符串是不能使用单引号括起来的,如果在 u 字符前添加转义字符 \ 则表示的含义就不同了,\u 转义之后表示后面的 4e2d 是一个 unicode 码,根据 unicode 字符集可以查询到汉字 '中' 的 unicode 码就是 4e2d,所以最终输出结果是汉字'中'。

综上所述,\n 表示换行符,\'表示普通的单引号字符,\\表示一个普通的\字符,\"表示一个普通的双引号字符,\u 后面的十六进制是文字的 unicode 编码。(这里不懂得可以参考之前的文章:字 符 编 码)

做一个总结,在 Java 语言中,字符 char 类型的数据只能使用单引号括起来,并且在 Java 语言中 char 类型完全可以存储一个汉字,另外在 Java语言中 \ 具有转义功能,常见的转义字符要知道代表什么含义。

(本文仅代表个人观点,不喜勿喷!)


点击下方链接↓,获取更多知识:

  • Java 中的基本数据类型
  • Java基本数据类型——整数型详解
  • Java基本数据类型——布尔型详解
  • Java基本数据类型——浮点型详解
  • Java基本数据类型——类型转换规则

Java基本数据类型——字符型详解相关推荐

  1. Java基本数据类型——布尔型详解

    在 Java 语言中布尔类型的值只包括 true 和 false,没有其他值,不包括 1 和 0,布尔类型的数据在开发中主要使用在逻辑判断方面,例如:如果外面在下雨,我出门带一把雨伞.如果明天休息,咱 ...

  2. Python数据类型——数值型详解

    上一篇文章:Python的变量和数据类型 用Python画的滑稽脸  这是我之前用Python的 turtle库画的一个滑稽脸的视频,如果想要源码的话可以看我之前的博客: 如何用Python画QQ表情 ...

  3. Java字节流和字符流详解

    文章目录 IO概述 什么是IO IO的分类 IO的流向说明图解 顶级父类们 字节流 一切皆为字节 字节输出流[OutputStream] FileOutputStream类 构造方法 写出字节数据 数 ...

  4. java读取每个字符_详解Java String字符串获取每一个字符及常用方法

    前言 对于字符串的操作,我们常用的就是trim()去除前后空格.subString()截取子字符串,其他的用的不多.下表中是字符串常用的方法.大家要记一记啊,特别是chartAt()方法比较重要的.因 ...

  5. java 类参数_Java的数据类型和参数传递(详解)

    Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型. Java中的基本数据类型 名称 大小 取值范围 byte型 (字节) 8bit -128-127 (-2^7到2^7-1) shor ...

  6. java字符编码详解_Java中字符编码格式详解

    一.前言 在分析Comparable和Comparator的时候,分析到了String类的compareTo方法,String底层是用char[]数组来存放元素,在比较的时候是比较的两个字符串的字符, ...

  7. java string设置编码_详解Java中String类型与默认字符编码

    为什么写这个 至于为什么要写这个,主要是一句mmp一定要讲,绕了一上午,晕死 Java程序中的中文乱码问题一直是一个困扰程序员的难题,自己也不例外,早在做项目时就遇到过很多编码方式的坑,当时想填来着, ...

  8. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  9. 40000+字超强总结?阿里P8把Java全栈知识体系详解整理成这份PDF

    40000 +字长文总结,已将此文整理成PDF文档了,需要的见文后下载获取方式. 全栈知识体系总览 Java入门与进阶面向对象与Java基础 Java 基础 - 面向对象 Java 基础 - 知识点 ...

最新文章

  1. [C] 图的广度优先遍历
  2. hdu 1556 Color the ball
  3. django如何给上传的图片重命名(给上传文件重命名)
  4. 互联网晚报 | 9月5日 星期日 | 美菜回应大规模裁员;网易云音乐Q2毛利率首次转正;美团展示数字人民币新应用...
  5. LVGL(2)Visual Studio模拟器使用
  6. 主动申请linux内存 脚本,Shell 脚本来自动监控 Linux 系统的内存
  7. 面向对象JavaScript入门——来自Mozilla的官网教程
  8. 【神经网络与深度学习摘要】第1章 绪论
  9. Java的Number和Math类
  10. libiconv android编译,(OK) 编译libiconv-1.14(静态库)—CentOS 7— android-ndk
  11. 射频放大电路的优化及ADS仿真
  12. win10开卓越性能模式方法
  13. C语言之基本算法34—分解质因数(方法一)
  14. micropython esp8266教程_ESP8266 Micropython – 连接大学Wi-Fi(WPA2 Enterprise PEAP)
  15. 用python发邮件(带附件)
  16. 大一学生接触人工智能的路程
  17. nrm 的使用与主要命令(可能踩过的坑)详细剖析
  18. 靶机测试 Me and My Girlfriend1笔记
  19. 新月剑痕十项属性内存修改器
  20. 如何用计算机算三角函数的度分秒,用计算器算三角函数!!!怎样输入度分秒!!!

热门文章

  1. foursquared 1
  2. ArrayDeque源码解析
  3. linux系统网络驱动简介
  4. 无法安装Hyper-V:虚拟机监控程序已在运行中的详细解决思路
  5. 在安卓上解决input调起软键盘之后容器高度被挤压的问题
  6. 2023年软件设计师中级(考点分析+复习笔记+历年真题+电子版课本
  7. Android Studio Build.gradle详细配置说明
  8. 为伊消得人憔悴--调试
  9. 三、建立Git本地仓库
  10. 汤姆大叔的博客 -【1】编写高质量JavaScript代码的基本要点