Java中char类型多种赋值方式形式,以及ASCII码的讲解

一、前言

对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等)



不亲自尝试,就不知道自己会不会!

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值