摘要
一、前言
对char类型进行赋值时,首先先了解char字符类型
1.1 Java字符
计算机内存和硬盘等存储空间的管理都是以字节为基本单位,每个字节都有自己的编号,而“字符-Char”是人们用作标记的符号,如’A’、'一’等,每个字符都具有约定的抽象含义。
(摘自:百度百科)
1.2 字符
(1)首先必须明确字符型(char)是整数类型,其在内存单元是以整数形式存放。
(2)其次,char类型的产生是为了用于:存储字母、数字、标点字符、非打印字符。
(3) 为方便处理字符,用特定的整数表示特定字符,即我们看到的编码。实质上就是一种转化代替的思想,用这种编码从而去描述字符,最常用的是ASCII码。
(引自 : 作者:Jason Gel 来源:CSDN
原文:https://blog.csdn.net/jin13277480598/article/details/48088725 )
1.3 char
16 位,是整数类型,用单引号括起来的 1 个字符(可以是一个中文字符),使用 Unicode 码代表字符,0~2^16-1(65535) 。 注意事项: 不能为 0个字符。 转义字符:\n 换行 \r 回车 \t Tab 字符 " 双引号 \ 表示一个\ 两字符 char 中间用“+”连接,内部先把字符转成 int 类型,再进行加法运算,char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。
(引自 : java的基本数据类型有八种 )
char类型用于标识单个字符.通常用来表示字符常量.例如:'A'是编码为65所对应的的字符常量.
与"A"'不同,"A"是一个包含字符A的字符串.(在java中,char类型用UTF-16编码表示Unicode代码点的代码单元)
详细了解代码单元和代码点请看:代码点和代码单元的理解-Java)
二、多种赋值形式
public class CharTest {
public static void main(String[] args) {
char i1 = 041;// 八进制
System.out.println(i1);
char i2 = 33;// 十进制
System.out.println(i2);
char i4 = '!';// 直接输入标点符号 !
System.out.println(i4);
System.out.println("'!'的ASCII值的十进制表示数为: " + Integer.valueOf(i4));// ! 的十进制表示数为:33,与直接输入33等价
char i3 = 0x21;// 十六进制
System.out.println(i3);
char i0 = '\u0021';
System.out.println(i0);
}
}
ASCII可显示字符 :
由程序代码可以看出,多种赋值形式,输出的结果是相同的.
道理很简单,就是将ASCII表中的图形的各种表示形式进行赋值,打印该变量时即可打印出该图形.
2.1 二、八、十六及Unicode编码形式进行赋值
[Tips] : 在jdk1.7之后,就可以使用二进制数开始赋值了.
二进制用0b开头,比如0b10,就是十进制的2
八进制用0开头,比如:012就是十进制的10
十六进制用0x开头,比如:0x12就是十进制的18`
程序中还有'\uxxxx',进行赋值的,这种是\u开头的是一个Unicode码的字符.
Unicode可同时包含65536个字符,ASCII/ANSI只包含255个字符,实际上是Unicode的一个子集。Unicode字符通常用十六进制编码方案表示,范围在’\u0000’到’\uFFFF’之间。
\u0000到\u00FF表示ASCII/ANSI字符。\u表示这是一个Unicode值.
因为包含65536个字符,0000-FFFF一共包含65536个数.故\u后面是4位十六进制进行表示的.
附:所有的Unicode字符:Unicode®字符百科
2.2 Integer.valueOf(String i)方法
public class IntegerDemo {
public static void main(String[] args) {
System.out.println(Integer.valueOf(010));// 八进制
System.out.println(Integer.valueOf(0b11111111)); // 二进制
System.out.println(Integer.valueOf(0xFFFF));// 十六进制
System.out.println(Integer.valueOf('!'));// 字符'!'
System.out.println(Integer.valueOf('\uFFFF'));// Unicode编码
}
}
/*结果为:
8
255
65535
33
65535
*/
将该参数解释为表示一个有符号的十进制整数, 就好像将该参数赋予 parseInt(java.lang.String) 方法一样。
结果是一个表示字符串指定的整数值的 Integer 对象。
换句话说,该方法返回一个等于以下值的 Integer
对象:
new Integer(Integer.parseInt(s))
参数:
前提为如果字符串不能被解析为整数,则参数可以是二进制,八进制,十进制,十六进制,字符串可以解析为整数的值或者是字符类型的值,以及Unicode编码等.
结果:
返回保存指定的 String 的值的 Integer 对象。
三、对于空字符与空格字符的区分
public class CharTest {
public static void main(String[] args) {
char m = ' ';
System.out.println(m + ",");
System.out.println("空格的ASCII值的十进制表示数为: " + Integer.valueOf(m));
char i = 0b000000;// 二进制
System.out.println(i+",");
System.out.println("空字符(NULL)的ASCII值的十进制表示数为: " + Integer.valueOf(i));
}
}
十进制32位空格.对于控制台的输出看上去都是控制,可是当输出两个十进制值的时候,两个值是不想同的.
空字符: 字符串结尾的标志(‘\0’),实际上他的数值是0。 可以理解为标志性字符型,其使命主要是为了表明字符串已经结束。
空格字符: 空格字符( ‘’单引号中间有一个空格)的ASCII码10进制32,16进制的0X20
两者区别:
最直观的区别:值不同两者的ASCII不同,空(NUL)字符码值是0,而空格字符的码值是32。再者,空字符人为规定了它的使命。
附:‘0’ 的ASCII是48,不要跟前面两个混为一团。3者是完全不同的概念,其本身的整型值不同,代表的字符也不同。
(引自:作者:Jason Gel 来源:CSDN 原文:
https://blog.csdn.net/jin13277480598/article/details/48088725 )
四、输出所有Unicode字符
public class CharTest {
public static void main(String[] args) {
for (char c = Character.MIN_VALUE; c <= Character.MAX_VALUE; c++) {
System.out.print(c + "\t");
if (c % 10 == 0)
System.out.println();
}
}
}
部分结果截图:
Unicode的代码点可以分成17个代码级别(code plane).
第一个代码级别成为基本的多语言级别,代码点从U+0000到U+FFFF,其中包括了经典的Unicode代码.例如:\u2122表示注册符号(™),\u03C0表示希腊字母π.
其余的16个附加级别,代码点从U+10000到U+10FFFF,其中包括了一些辅助字符(增补字符).
有些符号eclipse控制台是无法显示的,暂未找到解决办法!
(图片来源 : 让你彻底搞定各种编码来源ASCII、ANSI、GBK、unicode、UTF-8等)
不亲自尝试,就不知道自己会不会!