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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沿途小将 中级黑马   /  2014-8-12 13:51  /  1869 人查看  /  14 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 沿途小将 于 2014-8-16 13:37 编辑
  1. [php]
  2. char c = 'a' + 12; //no problem
  3. [/php]
  4. [php]
  5. char c = 'a';
  6. char cc = c + 12;//compile error:cant't convert from int to char
  7. [/php]
  8. char和int做运算时会向上转型为int,所以再赋给char时会编译错,让我不理解的是为什么第一个没问题
复制代码

点评

http://bbs.itheima.com/thread-127149-1-1.html  发表于 2014-8-12 13:52

14 个回复

倒序浏览
自己占一个席
回复 使用道具 举报
第一个‘a’是常量,而第二个‘a’是变量,char c = 'a'。c+12可能会超出char的范围的,我感觉是这样的吧。
回复 使用道具 举报 1 0
复仇者联盟 发表于 2014-8-12 14:12
第一个‘a’是常量,而第二个‘a’是变量,char c = 'a'。c+12可能会超出char的范围的,我感觉是这样的吧。 ...

第一个都没问题
回复 使用道具 举报
复仇者联盟 发表于 2014-8-12 14:12
第一个‘a’是常量,而第二个‘a’是变量,char c = 'a'。c+12可能会超出char的范围的,我感觉是这样的吧。 ...

第一个都没问题
回复 使用道具 举报
你这明显没看我的内容啊,兄弟。问题不一样。你说的那个,我找就知道啦
回复 使用道具 举报
是字符串
回复 使用道具 举报
J.twt 中级黑马 2014-8-12 15:20:05
8#
第一个是赋值,系统会自动强转,第二个是是一个字符变量和一个int类型的整数进行加法运算,得到的结果是int型,所有必需手动强转之后才能赋值给cc
char cc = (int)(c + 12);这样就没错了
回复 使用道具 举报
不好意思啊,兄弟,前面学的都给忘完了。
回复 使用道具 举报
icris 中级黑马 2014-8-13 21:26:19
10#
  1.                 int a = 1;
  2.                 byte b = 1;
  3. //                byte b = a;
复制代码

因为编译器不知道 a 是什么,只知道是 int,所以后一个会报错。
  1. char c = 'a';
  2. char cc = 'a' + 1;
  3. char ccc = (char) (c + 1);
复制代码

同样,编译器只知道 c 是 char ,不知道具体数值,不能确定是否在 char 的范围,不能帮我们转类型。
只要加上 final 就可以了
  1. final char c = 'a';
  2. char cc = 'a' + 1;
  3. char ccc = c + 1;
复制代码
回复 使用道具 举报
学习了                              
回复 使用道具 举报
前面是常量赋值,如果常量在char类型范围内会自动强转

后面是带变量的运算,需要手动强转
回复 使用道具 举报
大神的点评里有很全的答案啊。
回复 使用道具 举报
复仇者联盟 发表于 2014-8-12 14:12
第一个‘a’是常量,而第二个‘a’是变量,char c = 'a'。c+12可能会超出char的范围的,我感觉是这样的吧。 ...

这个解释貌似可以接受
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马