目录
前言
基本数据类型都有自己的默认数值,但是char的默认数值比较的奇怪,下面我来说明一下char的默认数值
char的默认数值
话不多说,直接上代码
public class Dem01 {
public static void main(String[] args) {
char[] arr = new char[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = 0;
System.out.println("----------" + arr[i] + "*****");
}
if (arr[0] == 0){
System.out.println("你好");
}
System.out.println("*******");
}
}
输出结果
看到这里大家就开始纳闷了,为什么上面输出没有0,为什么下面的判断可以通过呢?直接断点Debug看看他的默认值
这里可以看出他的默认值是‘\u0000’与0,这就可以解释为什么那个判断可以通过了,这时候又有小伙伴纳闷了‘\u0000’是什么?是ASCII值?还是?其实是Unicode码的字符,每一个'\u0000'都代表了一个空格,下面来解释一下什么是Unicode码 与ASCII
Unicode是什么?
Unicode 又被称为“万国码”、“单一码”,是一种由字符集和编码方案组成的计算机领域的标准规范。Unicode旨在克服常规的文字压缩方式的不足,针对不同语言、不同平台的文字转换和处理要求,采用了一种通用的二进制代码。
实际上Unicode标准也就是我们经常说的“Unicode编码系统”,主要可以分为编码方式和实现方式两个层次。
在Unicode中用数字0-0x10FFFF来映射字符,最多可以容纳1114112个字符,也就是1114112个码位。在Unicode中,我们使用的汉字“字”所对应的数字是23383。
表示一个 Unicode的字符时,经常使用“U+”的形式,随后是一个十六进制的数字来表示。
ASCII是什么?
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中最后一位用于奇偶校验。
Unicode与ASCII区别
ASCII编码是1个字节,而Unicode编码通常是2个字节。
字母A用ASCII编码是十进制的65,二进制的01000001;而在Unicode中,只需要在前面补0,即为:00000000 01000001。
总结
以上描述来看char的默认值为两个一个是‘\u0000’还有一个是0