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

© linder_qzy 中级黑马   /  2015-3-5 09:11  /  1052 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天发现个问题
int s = "s"+2; 编译不通过
int s1 = 's'+2; 编译能通过
int s = "s"+2;编译不通过我知道,可是为什么int s1 = 's'+2 编译却可以呢??

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 加油~

查看全部评分

8 个回复

倒序浏览
字符串在内存中是以char[]字符数组类型存储的,字符char在内存中是以它的unicode编码存储的比如's'的编码十进制数为115。
第一句“s"+2结果为字符串“s2”将一个字符串赋值给一个int类型肯定出编译错误。
第二句  's'+2相当于115+2这里将's'隐式类型转换 相当于(int)'s'+2  所以结果为117 int类型。

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
     's'是char类型,2是int,他们都是基本数据类型,存储在栈内存中,char占2个字节,int占4个字节,char与int相加会向上提升成int,值为它对应的ASCII值
  “s”是字符串,引用数据类型,大小根据字符串长度定,存储在堆内存当中,它转不了int

评分

参与人数 1黑马币 +3 收起 理由
万合天宜 + 3 赞一个!

查看全部评分

回复 使用道具 举报
int s = "s"+2; 编译不通过,是因为“s”是一个字符串,不能用ASIC编码表示
int s1 = 's'+2; 编译能通过,是因为's'是一个字符,而所有的字符,都有对应的ASIC编码表示
所以在与整数进行运算时,是以ASIC编码进行的运算

评分

参与人数 1黑马币 +2 收起 理由
万合天宜 + 2 赞一个!

查看全部评分

回复 使用道具 举报
路文龙 发表于 2015-3-5 10:28
字符串在内存中是以char[]字符数组类型存储的,字符char在内存中是以它的unicode编码存储的比如's'的编码十 ...

谢谢哈 没有想到是这么回事
回复 使用道具 举报
yangruijing 发表于 2015-3-5 10:52
int s = "s"+2; 编译不通过,是因为“s”是一个字符串,不能用ASIC编码表示
int s1 = 's'+2; 编译能通过, ...

谢谢啊 明白了 没有想到是ASIC的问题
回复 使用道具 举报
整形跟字符串形相加得到的结果也是字符串类型的,而字符类型在与整形相加时,会自动转换为整形
回复 使用道具 举报
wuyiai 来自手机 中级黑马 2015-3-6 10:13:07
8#
第一个返回的结果为字符串
回复 使用道具 举报
简单来说,byte,short,char,它们三个是同一级别的,在进行算数运算时,都可以自动转换成int类型的。
int s1 = 's'+2;当然编译可以通过了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马