为什么把ch++改成 ch=ch+1就会报错呢?

为什么把ch++改成 ch=ch+1就会报错呢?

public class ConditionDemo {
	public static void main(String[] args) {
		char ch='a';
		while(ch<'z'){
			System.out.print(ch+" ");
			ch++; //ch=ch+1;
		}
	}

为什么把ch++改成 ch=ch+1就会报错呢?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

1、在Java语法规则中,整形数据可以赋值给字符型变量,但是是有数据范围的,所以char ch=97是可以的。

2、当char a='a';a++;时,Java编译器会自动执行自动运算,其结果的类型仍然跟原变量类型相同,不会报错。

3、当char a='a';a=a+1;时,Java编译器解析的过程是,char型的a和int型的1相加,相加后的类型自动转换为int,所以当重新赋值给char型变量时就会报错,需要强制类型转换。

  • 北瓜Ss 提问者 #1
    1、在Java语法规则中,整形数据可以赋值给字符型变量,但是是有数据范围的,所以char ch=97是可以的。 3、当char a='a';a=a+1;时,Java编译器解析的过程是,char型的a和int型的1相加,相加后的类型自动转换为int,所以当重新赋值给char型变量时就会报错,需要强制类型转换。 第一条中说整形数据可以赋值给字符型变量,第三条中说int类型重新赋值给char型变量时就会报错。 这样不是矛盾吗?
    2018-01-13 19:15:01
  • 你好,第一条中是整型字面值赋值给char类型变量,第三条是整型变量赋值给char类型变量,前者只要数据没超过字符型的范围就不用强制转换,而后者必须强制转换。
    2018-01-13 21:01:48
THappy 2018-01-12 17:16:42

因为执行ch++;是将ch赋值成当前ch的ASCII码值加1对应的字符,而ch=ch+1;中,+运算符要求左右两边的数是同一类型才可以,所以ch+1是字符型+整型就会报错了。祝学习愉快~

  • 提问者 北瓜Ss #1
    char ch='a' ; System.out.println(ch+1);这样为什么又没有错误呢
    2018-01-12 17:25:55
  • THappy 回复 提问者 北瓜Ss #2
    首先,上面对于ch=ch+1;错误的解释有些不严谨,准确来说,ch++;是Java自动执行自增运算,不用我们去处理,而对于ch=ch+1;当执行ch+1时就会将ch自动转为整型来计算,计算结果是一个整型,然后当将这个整型数据赋值给字符型变量ch时就出错了,写成ch=(char)(ch+1);这样才可以。 其次,System.out.println(ch+1);是可以的,因为是直接输出了ch+1这个整型的计算结果,这里并没有赋值。
    2018-01-12 18:44:49
  • 提问者 北瓜Ss 回复 THappy #3
    懂了~谢谢老师
    2018-01-12 18:49:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师