学习Java基础解惑(1)——字符类型

Java基础解惑——字符类型

免责声明:因个人水平有限,如有错误还望加指正。

基础知识:

    char类型的变量存储单个的字符代码。因为Java中所有的字符都以Unicode存储,所以他们每个占16比特(2字节)的内存。

    声明一个字符类型:

    char myChar = 'X';

    这里用Unicode字符表示字母X来初始化变量。需要注意的是语句使用单引号作为字符字面量的定义符,对于编译器而言,这将起到区分字符'X'与变量X的作用。另外不能还用双引号作为定义符,因为双引号是用来定义字符串的。字符串"X"与字符'X'的字面量完全不同。

    1. 字符转移序列

    转移序列式一种简单常用的通过其代码设置字符的方式,以一个反斜杠(\)作为序列的开始,和熟悉的\n是一样的原理。

    以字母X为例,其Unicode编码的十六进制值是0x0058,因此同样可以使用这样的语句来进行声明:

    char myChar = '\u0058';

    这样做的结果与之前的初始化语句效果是一样的,使用这种方法可以输入任何Unicode字符,只需要知道其编码即可。

    解惑:

         有时候,我们需要对字符串中的双引号进行判断或者处理,这时候单纯的使用(\")这样的转义形式,可能会导致编译器报错失败。例如对字符串进行以split(双引号)的操作时,可以使用指定Unicode编码来实现判断,如:

       String.split("\\u0022");

    2. 字符算术

     我们已经知道字符可以通过指定编码来进行初始化赋值,实际上字符类型与数字是有着紧密的关系的。

     我们甚至可以直接使用数字来对字符串进行赋值,或者直接获取char类型的编码值,如:

     char mychar=0x0058;              //仍然初始化的值为'X'

     int mycharIndex=mychar;      //直接获取字符的Unicode编码值,需要注意的是,这样返回的结果将是十进制的88

     如果要获得十六进制的结果(58),则可以使用以下方法。

     Integer.toHexString(mycharIndex);

     我们还可以对字符(实质是对其Unicode编码)进行数学运算

     char mychar = 88;                 //这时mychar的值为'X'

     mychar +=1;                        //这时mychar的值就是'Y'了

      解惑:

               曾经使用char[]数组来存储从服务器端返回的信息,由于需要判断是否已经将结果读取全,就需要判断当前的数组是否已经存放满了。但是如果此想通过length属性来获取长度,那么返回的结果肯定会让你失望,如:

             char myCharArray[] = new char[256];

             System.out.println(myCharArray.length);         //将会在屏幕上赤裸裸的显示256,也就是你初始化时候的长度

             于是有网友提出还用for循环来计非空值数量的方式,来完成这个需求。但是在判断非空时遇到了一些疑惑,当char[]数组在初始化的时候,会将值全部初始化为0,而这句话是有歧义的。到底是'0',还是编码0x0000?如果是'0',那如果数组本身正常的值就有'0',那怎么办?所以猜测是编码为0。真相没有让人失望,确实是编码值为0。也就是相当于:  char myChar = 0x0000; (或者char myChar = 0)

             所以这样子的话计数条件就应该以Unicode编码为基准。那么最原始的循环就应当如下:

            char myCharArray[] = new char[256];

            int count = 0;                 //计数器

            boolen flag = true;                 //循环中断条件

            for(int i=0;i<myCharArray.length && flag==true;i++)

            {

                  if(myCharArray[i]!=0x0000)         //这是以十六进制编码来判断

                  //if(myCharArray[i]!=0)              //这是以十进制来判断

 

                  //if(myCharArray[i]!='\000')        //这是使用字符转移序列'\000'进行判断,'/000'表示空

 

                  {

                        count++;

                  }

                  else

                  {

                        flag = false;

                  }           

            }

            数组实际长度 = count;

posted @ 2013-02-27 11:59  依稀丶巧克力  阅读(846)  评论(1编辑  收藏  举报