• 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开发笔记(序)章节目录

  • 相关阅读:
    Jmeter应用大全
    js防止backspace回退到上一界面(兼容各种浏览器)
    easyui部分组件获得焦点
    防止用户直接在地址栏输入URL浏览文件
    Oracle入门基础(六)一一子查询
    Oracle入门基础(五)一一多表查询
    Oracle入门基础(四)一一多行函数
    Oracle入门基础(三)一一单行函数
    Oracle入门基础(一)一一基本查询
    测试用例的设计思路
  • 原文地址:https://www.cnblogs.com/pinlantu/p/10052447.html
Copyright © 2020-2023  润新知