黑马程序员技术交流社区

标题: 关于char类型的运算问题 [打印本页]

作者: 陈虹旭    时间: 2012-7-20 19:16
标题: 关于char类型的运算问题
视频中老师说到类型提升:byte、 short、char在运算中的值都将提升到int型

但是为什么
class  VarDemo1
{
        public static void main(String[] args)
        {
                char ch='a';
                ch='a'+1;
                System.out.println(ch);
        }
}
输出结果为b

class  VarDemo1
{
        public static void main(String[] args)
        {
               
                System.out.println('a'+1);
        }
}
输出结果为98

同样都是'a'+1  为什么输出的结果一个是b 一个是98  (我知道a的ASCII码是97)
只想知道为什么输出结果是不一样的  不是说char会提升到int型吗
作者: 夏儒日    时间: 2012-7-20 19:34
class  VarDemo1
{
         public static void main(String[] args)
        {
                 char ch='a';  //此处已定义了变量ch为char型数据
                 ch='a'+1;//故此处的运算结果会强转成char型数据,也就是打印b
                 System.out.println(ch);
         }
}

class  VarDemo1
{
         public static void main(String[] args)
        {
                 
                System.out.println('a'+1);  //此处是加法运算,运算结果自然提升为int型数据,故打印结果为98
         }
}
希望这么说你能理解~~~
作者: 焦晨光    时间: 2012-7-20 19:34
标题: (
本帖最后由 焦晨光 于 2012-7-20 20:23 编辑

Java中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。
char ch='a';
ch='a'+1;
System.out.println(ch);
上面的赋值操作进行了两步:
1.'a'+1 根据上面的规则(ava中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型)
   因此 'a'+1 的实际值为98
2.但是 ch='a'+1;  其中ch是char型的
   因此java中又将'a'+1 的值 经行了强制转换
   即ch='a'+1; (char ch = (char) 98 )
   故 输出 b
3.这条语句System.out.println('a'+1); 最后输出98
是因为打印语句中并没有经行强制转换 所以输出结果是98;
作者: 陈虹旭    时间: 2012-7-20 19:44
夏儒日 发表于 2012-7-20 19:34
class  VarDemo1
{
         public static void main(String[] args)

也就是说 如果定义了变量的数据类型,那结果就是该数据类型
         如果没有定义数据类型 ,会按照老师说的  byte short char运算后提升为int
对吗?  
作者: 陈虹旭    时间: 2012-7-20 19:47
焦晨光 发表于 2012-7-20 19:34
Java中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后 ...

哦  那看来是强制转换和未强制转换的问题啊 !  ch='a'+1  与 (char)('a'+1) 是一个意思呗
作者: 应文    时间: 2012-7-20 22:27
本帖最后由 应文 于 2012-7-20 22:30 编辑

class  VarDemo1
{
        public static void main(String[] args)
        {
                char ch='a';  //char型ch
                ch='a'+1;  //这句话相当于ch=(char)(int(字符a)+整型1),强制转换98为char型               
                System.out.println(ch);   //所以输出char型结果,b        
         }
}
输出结果为b

class  VarDemo1
{
        public static void main(String[] args)
        {
               
                System.out.println('a'+1);     //这里相当于int('a')+1=98,强制转换char型为int型进行运算,所以结果是98        
        }
}
输出结果为98






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2