A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈虹旭 中级黑马   /  2012-7-20 19:16  /  3022 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

视频中老师说到类型提升: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型吗

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
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
         }
}
希望这么说你能理解~~~

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报

(

本帖最后由 焦晨光 于 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;

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
夏儒日 发表于 2012-7-20 19:34
class  VarDemo1
{
         public static void main(String[] args)

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

哦  那看来是强制转换和未强制转换的问题啊 !  ch='a'+1  与 (char)('a'+1) 是一个意思呗
回复 使用道具 举报
本帖最后由 应文 于 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

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马