好好学Java:从零基础到项目实战
上QQ阅读APP看书,第一时间看更新

5.1.3 字符包装类型

正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character。初始化字符包装变量也有3种方式,分别是:直接用等号赋值、调用包装类型的valueOf方法、使用关键字new创建新变量。倘若要把字符包装变量转换成字符变量,则调用包装变量的charValue方法即可。甚至可以对字符包装变量做加减乘除运算,就像之前对待字符变量一般。字符包装类型的基本使用代码示例如下(完整代码见本章源码的src\com\string\character\PackChar.java):

        Character character='A';  // 声明一个包装字符变量
        System.out.println("character=" + character);
        char value=character.charValue();  // 把包装字符变量转换成基本字符变量
        System.out.println("value="+value);
        // Character类型与char类型的变量之间允许直接赋值,靠的是“自动装箱”和“自动拆箱”
        Character plusResult=(char) (character+1);
        System.out.println("plusResult="+plusResult);

注意到上述代码里面,包装字符变量character直接加1,相加之和强制转换成char类型后又直接赋给另一个包装变量plusResult。这里不免令人疑惑,整型和浮点型同属于基本类型,它们的变量相互赋值尚且需要显式地强制类型转换,如今有Character和char,一个是包装类型,另一个是基本类型,为何它们的变量相互赋值不需要强制转换类型呢?

这是因为包装类型仅仅对基本类型加了一层封装而已,内部的数据格式并没有发生变化,所以为了尽量减少代码的改动,在包装变量和基本变量之间赋值的时候,编译器会自动进行装箱和拆箱操作。所谓装箱,指的是编译器会默认调用valueOf方法,将基本类型的变量转换成对应包装类型的变量;至于拆箱,指的是编译器会默认调用***Value方法,将包装类型的变量转换成对应基本类型的变量。通过自动装箱和自动拆箱,Java代码实现了包装变量与基本变量的无缝衔接,从而简化了相关处理代码。

除了上面介绍的基本方法外,Character类型针对文本加工操作额外提供了一些字符处理方法,主要说明如下。

  • isDigit:判断输入的字符是否为数字。
  • isLetter:判断输入的字符是否为字母。
  • isLowerCase:判断输入的字符是否为小写字母。
  • isUpperCase:判断输入的字符是否为大写字母。
  • isSpaceChar:判断输入的字符是否为空格。
  • isWhitespace:判断输入的字符是否为空白(非数字、非字母、非标点)。
  • toLowerCase:输入一个字符,如果原字符是大写字母,就返回对应的小写字母;否则原样返回该字符。
  • toUpperCase:输入一个字符,如果原字符是小写字母,就返回对应的大写字母;否则原样返回该字符。

以上的字符处理方法均需按照“Character.方法名称(输入字符)”的形式调用,具体的方法调用代码示例如下:

        Character letter='A';  // 声明一个包装字符变量
        // 下面是Character常用的字符处理方法
        boolean isDigit=Character.isDigit(letter);  // isDigit方法判断字符是否为数字
        System.out.println("isDigit=" + isDigit);
        boolean isLetter=Character.isLetter(letter);  // isLetter方法判断字符是否为字母
        System.out.println("isLetter=" + isLetter);
        boolean isLowerCase=Character.isLowerCase(letter);  // isLowerCase方法判断字符是否为小写
        System.out.println("isLowerCase=" + isLowerCase);
        boolean isUpperCase=Character.isUpperCase(letter);  // isUpperCase方法判断字符是否为大写
        System.out.println("isUpperCase=" + isUpperCase);
        Character line='\n';  // 声明一个包装字符变量
        boolean isSpaceChar=Character.isSpaceChar(line);  // isSpaceChar方法判断字符是否为空格
        System.out.println("isSpaceChar=" + isSpaceChar);
        // isWhitespace方法判断字符是否为空白(非数字、非字母、非标点,包括空格、制表、回车、换行等)
        boolean isWhitespace=Character.isWhitespace(line);
        System.out.println("isWhitespace=" + isWhitespace);
        char lowerCase=Character.toLowerCase(letter);  // toLowerCase方法把字符转换为大写
        System.out.println("lowerCase=" + lowerCase);
        char upperCase=Character.toUpperCase(letter);  // toUpperCase方法把字符转换为小写
        System.out.println("upperCase=" + upperCase);