JAVA

Java的char类型

一、Char介绍


字符型数据类型。用于存放单个字符。用单引号【’ ‘】括住

2字节,16位。char在java中是16位,因为java用的是Unicode。一个16位的编码所能产生的字符只有65536个。

Unicode码包括ASCII码。大多数计算机采用ASCII(美国标准信息交换码),它是表示所有大小写字母、数字、标点符号和控制字符的8位编码表。从’\u0000’到’\u007F’对应128个ASCII字符。

二、char赋值

1. 概述

因为char是16位的,采取的Unicode的编码方式,所以char就有以下的初始化方式:

char c='c'; //字符,可以是汉字,因为是Unicode编码。需要加单引号。

char c=十进制数,八进制数,十六进制数都可以; //可以用整数赋值【整数范围:0~65535】。输出字符编码表中对应的字符。

char c='\u数字'; //用字符的编码值来初始化,如:char='\0',表示结束符,它的ascll码是0,这句话的意思和 char c=0 是一个意思。

2.  实例

        char x1 = 65;//为char类型变量x1 赋值常量值 65。十进制编码的ASCII码表中字符'A'对应的是65
        char x11 = 41;//')'的ASCII码为十进制数是41
        char x12 = 101;//'e'的ASCII码为十进制数是101
 
        char x2 = 'A';//ASCII字符 'A' 的Unicode码是0041。zi
        char x3 = '\u0041';
//----------------------------------------------------------------
        int y1 = x1;
        int y11 = x11;
        int y12 = x12;
 
        int y2 = x2;
        int y3 = x3;
//----------------------------------------------------------------
        System.err.println("x1="+x1+", x1的int值="+y1);
        System.err.println("x11="+x11+", x11的int值="+y11);
        System.err.println("x12="+x12+", x12的int值="+y12);
        
        System.err.println("x2="+x2+", x2的int值="+y2);
        System.err.println("x3="+x3+", x3的int值="+y3);
x1=A, x1的int值=65
x11=), x11的int值=41
x12=e, x12的int值=101
x2=A, x2的int值=65
x3=A, x3的int值=65

三、char运算


  char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值。

1. 总结

在JAVA中,对char类型字符运行时,直接当做ASCII表对应的整数来对待。

(1)char+char,char+int——类型均提升为int,附值char变量后,输出字符编码表中对应的字符。
    char m=‘a’+1;   -->b //提升为int,计算结果98对应的字符是b。

(2)自增和自减操作符可以用在char类型变量上,这会得到字符之前或者之后的Unicode字符。
    char x1 = 'A';
    System.err.println(++x1); //输出B

2. 例子

 四、为什么char类型的变量可以赋值为整型数字?


char在java中是unicode编码。Java中对char型数据,在内存中存的就是整数,对应一张ASCII码表。

  • 比如说字符知 ‘A’ 对应的是65,字符 ‘a’ 对应的是97 ,所以char c1 = ‘A’ ; 等效于 char c1 = 65 ;

正是因为这样,所以字符型数据既可以作为一个字符使用,也可以作为一个整数使用,所以char型数据可以和int型数据进行运算!

    比如 ‘A’ + 1 的结果如果用char型变量接收就是 ‘B’ , 用int型变量接收就是66
    char c = ‘A’+1; 最后c为’B’
    int i = ‘A’ + 1 ; 最后i为 66

虽然char型是以整数存储,但是和int型还是有一定区别的,表现在取值范围上:

    char型 占2个字节 无符号 范围是0~65535,所以char c = 65536 就会报错了,专因为越界了