Java开发笔记(三十二)字符型与整型相互转化
前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行!
// 字符允许直接赋值给整型变量
private static void charToInt() {
int a = 'A';
System.out.println("int a="+a);
int tian = '田';
System.out.println("int tian="+tian);
}
马上运行上面的测试代码,输出日志如下所示:
int a=65
int tian=30000
之所以出现字符变成整数的情况,是因为计算机为了方便处理,将包括英文在内的拉丁字母都采用数字编码,这样字符才能保存在只认得二进制数的计算机系统当中。因为计算机编程诞生在西方,所以早期编程语言只支持英语和其他西欧语言。英文字母才26个,区分大小写也才52个,加上标点符号等等,屈指一算总共128个顶天了,只消一个字节来表达西方世界的字符绰绰有余(一个字节为8位二进制数,可表达255个数值)。这套单字节的字符编码标准源自美国,故而它被称作ASCII码(全称American Standard Code for Information Interchange,意思是美国信息交换标准代码)。
可是计算机编程传播到其它国家时发现了问题,很多国家都有自己的语言文字,像常用的汉字就有三千多个,单字节的ASCII码根本不够用。于是后来又制定了DBCS标准(Double-Byte Character Set,意思是双字节字符集),该标准使用两个字节来表示一个字符,这样一共可以表示256*256-1=65535个字符,其中前128个字符与ASCII码保持一致,剩余的位置留给了别的语言文字和扩展符号。其中以汉字为主的东亚象形文字占据了从0x3000到0x9FFF之间的编码,足足占去了DBCS所有字符的十六分之七,真要感谢老祖宗的聪明才智,为数千年之后的我们争取了将近一半的编码空间。
既然字符值允许直接赋给整型变量,反过来整数(0-65535)也能直接赋给字符变量。譬如整数65赋值给字符变量就变成了字母“A”,整数30000赋值给字符变量就变成了汉字“田”。当然只有0到65535之间的整数才能正常给字符变量赋值,因为其它整数不在Java的字符型范围之内。下面是将整数赋值给字符型变量代码例子:
// 0-65535之间的整数允许直接赋值给字符变量。字符类型占两个字节
private static void intToChar() {
char a = 65;
System.out.println("char a="+a);
char tian = 30000;
System.out.println("char tian="+tian);
// 以汉字为主的东亚象形文字(中日韩)占据了从0x3000到0x9FFF之间的编码
char begin = 0x3000;
System.out.println("chinese begin="+begin);
char end = 0x9FFF;
System.out.println("chinese end="+end);
char max = 65535; // 字符型可表达的范围是0-65535
System.out.println("char max="+max);
}
上面说道整型数与字符型之间允许直接相互赋值,也就是说可以把字符变量当作整型变量看待,这意味着字符变量也能参与加减乘除四则运算。不过一旦字符变量参与计算,由于编译器不能确定计算结果是否还落在0-65535的整数区间,因此就必须显式把运算结果强制转换成字符char类型。以打印所有的大写英文字母为例,只要指定了初始字符为“A”,那么便能对初始字符逐次加一,从而完成从“A”到“Z”之间所有字符的遍历操作。具体的大写字母遍历代码示例如下:
// 字符变量允许跟整数直接加减乘除
private static void printCapital() {
char a = 'A';
for (int i=0; i<26; i++) {
// 因为不确定a+i之和是否超出0-65535的范围,所有需要强制转换成字符类型
char capital = (char) (a+i);
System.out.println("capital="+capital);
}
}
更多Java技术文章参见《Java开发笔记(序)章节目录》
Java开发笔记(三十二)字符型与整型相互转化的更多相关文章
- Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式
一.多环境开发 我们平常都是在自己的开发环境进行开发, 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用, 等测试人员测试通过后,我们会将项目部署到生成环境上线使用. 这个时候就有一 ...
- Java开发笔记(十二)布尔变量论道与或非
在编程语言的设计之初,它们除了可以进行数学计算,还常常用于逻辑推理和条件判断.为了实现逻辑判断的功能,Java引入了一种布尔类型boolean,用来表示“真”和“假”.该类型的变量只允许两个取值,即t ...
- “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Java开发学习(三十六)----SpringBoot三种配置文件解析
一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...
- Java开发笔记(一百二十)AWT文本标签
前面介绍了AWT窗口及其面板的简单用法,其中展示出来的控件只有按钮一种,还有很多好用好玩的控件有待介绍.首先是文本标签Label,该控件用于显示一段平铺文本,它不花哨也不跳动,完全就是素面朝天的文本字 ...
- Java开发笔记(一百二十五)AWT图像加工
前面介绍了如何使用画笔工具Graphics绘制各种图案,然而Graphics并不完美,它的遗憾之处包括但不限于:1.不能设置背景颜色:2.虽然提供了平移功能,却未提供旋转功能与缩放功能:3.只能在控件 ...
- Java开发笔记(一百二十六)Swing的窗口
前面介绍了AWT界面编程的若干技术,在编码实践的时候,会发现AWT用起来甚是别扭,它的毛病包括但不限于下列几点:1.对中文的支持不好,要想在界面上正常显示汉字,还得在运行时指定额外的运行参数“-Dfi ...
- Java开发笔记(一百二十二)AWT选择框
前面介绍了两种文本输入框的用法,不过实际应用很少需要用户亲自文字,而是在界面上列出几个选项,让用户勾勾点点完成选择,这样既方便也不容易弄错.依据选择的唯一性,可将选项控件分为两类:一类是在方框中打勾的 ...
- Java开发笔记(一百二十八)Swing的图标
前面提过,AWT没提供能够直接显示图像的控件,这无疑是个令人诟病的短板,因为一上来就得由程序员自己去定义新控件,对于初学者来讲很不友好.这个问题在Swing中也解决掉了,不过Swing并未提供单独的图 ...
- Java开发笔记(一百二十九)Swing的输入框
Swing的输入框仍然分成两类:单行输入框和多行输入框,但与AWT的同类控件相比,它们在若干细节上有所调整.首先说单行输入框,AWT的单行输入框名叫TextField,平时输入什么字符它便显示什么字符 ...
随机推荐
- swoole+websocket+redis实现一对一聊天
如同web端的QQ和微信一样,这是一个web端的聊天程序. 环境:ubuntu + php + swoole扩展 + redis + mysql Redis 实现每个连接websocket的服务都唯一 ...
- Java内存模型锦集
[内存操作与内存屏障] 内存模型操作: lock(锁定) : 作用与主内存的变量, 它把一个变量标识为一条线程独占的状态 unlock(解锁) : 作用于主内存变量, 它把一个处于锁定状态的变量释放出 ...
- 在vue项目中mock数据
第一步:安装: 在命令行中执行: npm install mockjs; 第二步:定义index.js文件 我们新建一个mock文件夹,此文件夹中建一个index.js文件:在index.js中输入以 ...
- Java script 逻辑运算符
a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回a 1.只要“&&”前面是false,无论“&& ...
- EF Core中避免贫血模型的三种行之有效的方法(翻译)
Paul Hiles: 3 ways to avoid an anemic domain model in EF Core 1.引言 在使用ORM中(比如Entity Framework)贫血领域模型 ...
- vue1.0与vue2.0对于v-for的使用的区别
vue1.0与vue2.0对于v-for的使用的区别: 1,vue1.0中有$index,而vue2.0将$index移除. 2,vue1.0中(index,item) in list 而vue2.变 ...
- 选择 25k 的 996 还是 18k 的 965
阅读本文大概需要 3.7 分钟. 文中部分内容来源:http://h5ip.cn/hSDk 最近的 996.ICU 话题持续在火爆,一般热点新闻的热度持续时间为一星期,这次是程序们的集体发声导致,戳中 ...
- [Swift]LeetCode450. 删除二叉搜索树中的节点 | Delete Node in a BST
Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...
- [Swift]LeetCode657. 机器人能否返回原点 | Robot Return to Origin
There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its mov ...
- 交叉编译 tcpdump
目录 1. 下载 tcpdump 2. 交叉编译 3. 相关说明 1. 下载 tcpdump 官网:http://www.tcpdump.org/ 2. 交叉编译 交叉编译libpcap: $ wge ...