zoukankan      html  css  js  c++  java
  • 学习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;

  • 相关阅读:
    调用打印预览问题
    html2canvas+Canvas2Image分享海报功能踩坑
    SQL Server – Show/Hide Results Pane in Management Studio 2012
    jQuery
    Sap PI 接口配置
    WebService 错误解决记录
    线程
    HTML和CSS
    C#高编
    MVC3
  • 原文地址:https://www.cnblogs.com/ButterBall/p/2934917.html
Copyright © 2011-2022 走看看