zoukankan      html  css  js  c++  java
  • java中char类型的变量为什么可以赋值为整型数字?

    1、JAVA中,char占2字节,16位。可在存放汉字

    2、char赋值

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

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

    char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。

    注:只能放单个字符。

    3、char运算

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

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

    示例1:

    char m='a';                               -->a

    char m='a'+'b';                          -->?            //char类型相加,提升为int类型,输出对应的字符(a和b分别对应

                                                                               的数值为97和98,相加等于195,其对应的字符为 ?)。

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

    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。

    示例2:

    char a = 97;                                 -->为char类型变量 a 赋值常量值 97。

    char b = 'a'+3;                             -->d               // 97+3=100,ASCII对应的字符为 d。

    char c = a+3;                               -->报错        //无法从int类型转换为char类型,接下来让我们了解下为什么会不

                                                                             能这样运算:

            首先,我们先知道在jvm内存机制中,char类型数据运算是将字符在ASCII表对应的整数以int类型参与运算(可以认为' a '=97),常量(97)与常量(3)运算得到一个新的常量(100),常量赋值给变量(b),不存在强制转换,只要这个接受变量(b)的类型范围大于这个常量即可。而变量声明时需要定义数据类型(例:char a),内存就为这个变量划分一个char类型大小的空间,其中变量(a)的值是可变的,而常量(3)的值是不变的,两个运算得到的还是一个变量,本例中(a+3)是int类型的变量,而int类型变量(a+3)赋值给char类型变量(c)需要强制转换,因此会报错。

    char c=(char)(a+3);                   -->d    

                                                               

    
    
    

    总结:

    用单引号' '标识,只能放单个字符。

    char+char,char+int——类型均提升为int,附值char变量后,输出字符编码表中对应的字符。



    为什么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 就会报错了,专因为越界了

  • 相关阅读:
    JVM堆内存设置和测试
    转:面试题:“你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?”
    JVM--标记-清除算法Mark-Sweep
    JVM 垃圾回收器工作原理及使用实例介绍
    BSGS算法(大小步算法)
    Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
    Codeforces Round #605 (Div. 3)
    POJ 2516Minimum Cost(最小费用流+特判)
    POJ 3155Hard Life(最大密度子图)
    洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)
  • 原文地址:https://www.cnblogs.com/lncyc/p/12865752.html
Copyright © 2011-2022 走看看