今天看到一道题,是这样子的:


package test;
 
  
public class Char {
 
  
public static void main(String[] args) {
 
  
char ch1 = 97;
 
  
char ch2 = 'a';
 
  
out.println("ch1=" + ch1);
 
  
out.println("ch2=" + ch2);
 
  
      }
 
  
}
 
 
 
  当时下意识作出判断,输出的结果分别应该是“ch1=97”和“ch2=a”,但答案都是a。于是补了一下这方面的知识点。 
 
 
 

     
 
 
 
知识点:
 
 
 
   char类型 
  
 
  

    1.  char类型是一个单一的16位Unicode字符; 
  
 
  

    2.  最小值是\u0000(即为0); 
  
 
  

    3.  最大值是\uffff(即为65535); 
  
 
  

    4.  char类型可以储存任何字符。 
  
 
  

      
  
 
  
 
   char赋值 
  
 
  

    char a='a';      //任意单个字符,加单引号。 
  
 
  

    char a='中';     //任意单个中文字,加单引号。


输出字符编码表中对应的字符。



注:只能放单个字符。



 



char运算



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



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



由char赋值可知,开篇提到的char ch1=97,赋值为整数97时,对应字符编码ASCII表里的a,因此输出为a。同理验证,如果是98,对应的就是b,99对应c。



 



Java面试常见试题:



char类型变量中能不能存储一个中文汉字,为什么?



答:char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个char类型占2个字节(16比特),所以放一个中文是没问题的。



 



示例:


char m='a';                               ——a。 
 
 
 

   char m='a'+'b';                          ——Ã。  //char类型相加,提升为int类型,输出对应的字符。 
 
 
 

   int m='a'+'b';                             ——195。//195没有超出int范围,直接输出195。 
 
 
 

   char m='a'+b;                           ——报错。//因为b是一个赋值的变量。 
 
 
 

   char m=197;                            ——Ã。 //输出字符编码表中对应的字符。 
 
 
 

   char m='197;                           ——报错。//因为有单引号,表示是字符,只允许放单个字符。 
 
 
 

   char m='a'+1;                          ——b。//提升为int,计算结果98对应的字符是b。 
 
 
 

   char m='中'+'国';                     ——42282。 
 
 
 

   char m='中'+'国'+'国'+'国';       ——报错。int转char有损失。因为结果已经超出char类型的范围。 
 
 
 

   int m='中'+'国'+'国'+'国';          ——86820 
 
 
 

   char m='中'+1;                        ——丮。//1是int,结果提升为int,输出对应的字符。 
 
 
 

   char m='中'+"国";                    ——报错。String无法转换为char。 
 
 
 

   System.out.println('中'+"国");  ——中国。//没有变量附值的过程。String与任何字符用“+”相连,转换为String。