黑马程序员技术交流社区

标题: char类型赋值错误,求解 [打印本页]

作者: 沿途小将    时间: 2014-8-12 13:51
标题: char类型赋值错误,求解
本帖最后由 沿途小将 于 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时会编译错,让我不理解的是为什么第一个没问题
复制代码


作者: 沿途小将    时间: 2014-8-12 13:52
自己占一个席
作者: 复仇者联盟    时间: 2014-8-12 14:12
第一个‘a’是常量,而第二个‘a’是变量,char c = 'a'。c+12可能会超出char的范围的,我感觉是这样的吧。
作者: 沿途小将    时间: 2014-8-12 14:30
复仇者联盟 发表于 2014-8-12 14:12
第一个‘a’是常量,而第二个‘a’是变量,char c = 'a'。c+12可能会超出char的范围的,我感觉是这样的吧。 ...

第一个都没问题
作者: 沿途小将    时间: 2014-8-12 14:32
复仇者联盟 发表于 2014-8-12 14:12
第一个‘a’是常量,而第二个‘a’是变量,char c = 'a'。c+12可能会超出char的范围的,我感觉是这样的吧。 ...

第一个都没问题
作者: 沿途小将    时间: 2014-8-12 14:45
你这明显没看我的内容啊,兄弟。问题不一样。你说的那个,我找就知道啦
作者: Franklin    时间: 2014-8-12 14:50
是字符串
作者: J.twt    时间: 2014-8-12 15:20
第一个是赋值,系统会自动强转,第二个是是一个字符变量和一个int类型的整数进行加法运算,得到的结果是int型,所有必需手动强转之后才能赋值给cc
char cc = (int)(c + 12);这样就没错了
作者: 复仇者联盟    时间: 2014-8-13 17:28
不好意思啊,兄弟,前面学的都给忘完了。
作者: icris    时间: 2014-8-13 21:26
  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;
复制代码

作者: _童金辉    时间: 2014-8-13 21:37
学习了                              
作者: Huberry    时间: 2014-8-13 21:48
前面是常量赋值,如果常量在char类型范围内会自动强转

后面是带变量的运算,需要手动强转
作者: 晓风    时间: 2014-8-13 21:49
大神的点评里有很全的答案啊。
作者: 桂何钢    时间: 2014-8-13 21:53
复仇者联盟 发表于 2014-8-12 14:12
第一个‘a’是常量,而第二个‘a’是变量,char c = 'a'。c+12可能会超出char的范围的,我感觉是这样的吧。 ...

这个解释貌似可以接受




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