问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java里不是说char类型自动向int型转换吗?那为什么..

发布网友 发布时间:2022-04-23 15:30

我来回答

4个回答

热心网友 时间:2023-10-08 15:29

你首先要明白,在基本类型数据当中,强制类型转换只发生在int、long、float和double之间。比int类型低或就是int型的像byte型、short型、char型、int型之间的转换不不要强制类型转换,也不存在着运算优先级和类型转换的问题,这是java官方规定的,你无权修改。至于运算后的结果是否能够被左边的类型容纳,你在输入的时候就能知道。追问什么意思,那你怎么知道18具体是什么类型的 你能确定18不是int类型吗?

那如果这样呢,请看题
char a='a';
char b=a+18; //运行时程序报错了,这里最后的结果是int,需要强制转换,为什么呢

追答其实char a和'a'不是一回事。就像'a'+18 和b+18不是一回事一样。'a'这个东西是一个常量值(你不要看到'a'就以为它是char类型,其实这里写'a'和97是一样的,默认都是int类型的常量,仅仅加上单引号是为了告诉我们这里面只能放char规定范围的数值)。而你定义了char a='a'这就不一样了,这个a是变量,仅仅是把常量的值赋给变量,这个是'a'这个int值传递给了char,这时候a就是char类型了。char类型与18进行运算,当然得到的结果就是int型,而且必须是int型的内存块。
‘a’+18其实是两个int型的常量进行运算,然后生成一个新的int类型的常量。传递给b的是一个常量值(常量不可改变,变量可以改变),常量的值赋给变量,不存在强制转换,只要这个变量的类型值能够容纳这个新的常量即可。理解这个,你就需要理解常量不可改变这一点上,两个新的常量相加会生成一个新的常量。而变量与常量相加会形成一个新的变量值。
而a+18,其实a已经分配了一个内存空间用存放char类型变量a(记着,a是变量,值可以改变,常量值不可以改变,而且a是char类型),然后把a复制一份放到内存,然后用复制的值的与int类型的常量18进行运算,这时候生成是一个变量值(没有标注,但是一定有一个变量来存放它),然后把这个变量值赋给变量b,因为是变量,存在着类型转换问题。原理是因为a与18分别处于不同的内存块当中,这时候传递给b的是2个内存空间的值,这时候就存在着转换问题了。
其实,你只要理解了常量和变量的内存模型,这个问题就理解了。

至于具体的解释,可以看看马士兵老师的java基础教程,这里面对这种转换又十分合理的解释。
我的解释不站在内存分配上是很难解释的。

热心网友 时间:2023-10-08 15:30

char b = 'a'+18; //因为char本身在码表中可以用数字表示的,然后运算玩之后还是char,应该输出s 
//另外,如果下面定义就是错的了。
char a = 'a';
char b = a + 18; // 这样就是错的,因为JVM运算完后不知道结果是多少,所以会提示损失精度的错误,关于一个类型变量值的问题。

热心网友 时间:2023-10-08 15:30

应该跟运算符优先级没有关系,
char b = 'a' + 18;的执行顺序应该是这样:
'a'+18先将'a'转成int类型的,即变成了97+18,
最后再隐式转换(char)(97+18),即获取结果为's'

热心网友 时间:2023-10-08 15:31

这个不是这样理解的,等号两边存在等级关系,但是是不能比较的,等号左边b的类型是你在前面已经声明了的是不能变的,18是int类型,但是它表示的是unicode表中字符a往后的第18个位置所表示的字符,如果你在前面声明的b是int类型,那么等号左边就是int类型,如果右边不变,a就是97追问char b=6+'a';

难道就是说字符a往前的第6个位置表示的字符?哦。说错了,其实要是加法都是往后的意思,那减法才是往前的意思?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
mrna转录试剂盒 windows7应用程序损坏或丢失怎么办? 联想windows7怎么恢复不小心删除的应用 Win7电脑图标不见了如何恢复解决Win7电脑图标丢失问题的有效方法_百 ... 美女主播软件有哪些 什么软件看美女直播? 什么视频直播软件可以免费看女神直播? 钣金工业设计 钣金灰本段用途 关于刮胡子的相关问题 java中怎么样把Character 转成 int java 中char为什么能转int java中把char型数组转换成int型数组怎么做? java中如何将 char 的 1转换为 int 的 1 java 怎么把char转化成int 如何将char类型的数据转化为int java java char 转 int 咋转? java怎么把char 变成int 胡蝶的个人经历 打印机怎么搜怎么打印照片 女杂技演员肩上跳芭蕾,这种技艺有多难练? 透明人变天鹅!吴昕曾自嘲:在大本营你看得着我吗?她如今怎么样了? 说说看,家鹅与天鹅有多少不同之处? 如果你是丑小鸭当你变成1只美丽的天鹅时你会怎样想? 如何才能练出性感的臀部线条? 怎么样用照片纸,在打印机上面打印出相片。怎么设置或要用上面软件。 跑步可以练就天鹅颈么 纤细天鹅劲是怎么炼成的,还是可以通过其他方法? 女生怎样练就气质天鹅 怎么样才能练出天鹅颈啊? oppo手机怎么获取root权限? 怎样把char转换为int(c++或java? 关于java char 转化为int的问题 java 中怎么样把char 数组arr[] 中的字符转化一个int 数组? oppo手机root权限怎么开启? Java中把char数组中的某一段数字作为int取出来 大哥,我是一名java菜鸟,麻烦问一下,为什么字符型数字转换为整型数字“-48”就可以了,真心求教,先谢谢 Java中怎么把int型的数字转换成char型的数字 OPPO手机的root权限怎么打开? java中char类型和int类型相加结果是char类型还是int类型 oppo手机如何开启root权限 java写的十六进制转化为十进制,类型转换char->int出错 oppo手机怎么root权限获取 怎么转换java中char类型大小写? oppo手机怎么开启root权限 浙江省介绍? 求关于浙江省的介绍! 请介绍浙江省 浙江的历史简介? 浙江省在那?