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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余银桂 中级黑马   /  2012-6-19 20:41  /  1768 人查看  /  5 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余银桂 于 2012-6-20 10:02 编辑
  1. int i=99;
  2. System.out.println(true?'a':99999);
  3. System.out.println(true?'a':99);  //重点是这个  
  4. System.out.println(true?'a':i);

  5. //第一个和第二个的输出结果很费解,这是为什么?
复制代码
  1. int i=99;
  2. System.out.println('a'+99999);
  3. System.out.println('a'+99);
  4. System.out.println('a'+i);

  5. //还有这个
复制代码
  1. byte d = 20;
  2. byte e = 30;
  3. byte f = d + e;
  4. //那这个呢?
复制代码

评分

参与人数 1黑马币 +20 收起 理由
黄奕豪 + 20 赞一个!

查看全部评分

5 个回复

倒序浏览
本帖最后由 吴扬 于 2012-6-19 20:53 编辑

因为char类型的数据参与运算首选会被向上提升为int类型再参与运算,所以第一段和第二段代码不会报错,字符a会被转换成int类型,编译通过
第三段代码会报错,因为byte类型的数据参与运算首先被向上提升为int类型的,参与运算之后再赋值给byte类型的f就会报错。要强制转换数据类型的。
byte d = 20;
byte e = 30;
byte f = (byte)(d + e);

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
除了LZ说的那个重点,其他的都要用到基本数据类型的转型,int类型以下的包括byte、char、short类型的数据在运算时都要转换成int型才能参加运算。所以最后的结果都是int型。而这个,byte f=d+e; 这是把d 和 e转型为int后,进行相加运算再把和赋给byte类型f,肯定会损失精度啊。

还有这个,true?a:99;,我也不明白为什么结果是a,纠结中。
回复 使用道具 举报
很简单看看就明白了
?:运算的后两项类型要相同,而且低精度向高精度自动转换,char在java中是以 两字节表示且非负,所以可以取的范围是0~65535
第一个true ? 'a' : 99999,因为99999大于65535,前面的'a'会被强转成int(因为后面的不能转成char了,否则会有精度损失),所以?:的结果是int,因此是97。
第二个true ? 'a' : 99,因为99小于65535,编译器会根据第一个'a'认为99也是char,所以?:的结果是char,因此是a ,不信你可以把99改成65536,结果输出就和上边一样是97.
第三个true ? 'a' : i,i是变量,明确了就是个int,'a'被低精度向高精度转,?:返回的是int,因此是97
下面3个不用解释了吧?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
类型自动转换顺序为(byte,short,char)-->int-->long-->float—>double,这样第一段第二段很容易理解
第三个,byte f=d+e; d 和 e转型为int后,进行相加运算把和赋给byte类型f,会损失精度。
回复 使用道具 举报
java中的运算都是默认由低精度向高精度转换
true ? 'a' : 99999   因为'a'是一个字符,字符的值是unicode值,范围是0~65535,而字符'a'对应的值是97,因为99999超过65535,所以比较时,要将'a'转换为与99999一样的int型,三元运算,前面boolean值为true,就返回前面一个,也就是'a',而'a'已经被转为int型,因此结果就为97.
true ? 'a' : 99   其实正好和上面相反,99小于65535,所以99默认为字符,也就是对于的字符'c',因此返回结果为字符a
最后一个因为i已经被定义为int型,所以结果和第一个一样


第二题和第一题原理是一样的,如果不明白值对应的字母,就去查ASCII码表

第三题
byte b=20,因为20为int型,int型转换为字节型会损失精度,编译会失败,这种情况需要强制转换

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

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