黑马程序员技术交流社区

标题: 字符和整型相加 [打印本页]

作者: linder_qzy    时间: 2015-3-5 09:11
标题: 字符和整型相加
今天发现个问题
int s = "s"+2; 编译不通过
int s1 = 's'+2; 编译能通过
int s = "s"+2;编译不通过我知道,可是为什么int s1 = 's'+2 编译却可以呢??
作者: 路文龙    时间: 2015-3-5 10:28
字符串在内存中是以char[]字符数组类型存储的,字符char在内存中是以它的unicode编码存储的比如's'的编码十进制数为115。
第一句“s"+2结果为字符串“s2”将一个字符串赋值给一个int类型肯定出编译错误。
第二句  's'+2相当于115+2这里将's'隐式类型转换 相当于(int)'s'+2  所以结果为117 int类型。
作者: z47057554    时间: 2015-3-5 10:28
     's'是char类型,2是int,他们都是基本数据类型,存储在栈内存中,char占2个字节,int占4个字节,char与int相加会向上提升成int,值为它对应的ASCII值
  “s”是字符串,引用数据类型,大小根据字符串长度定,存储在堆内存当中,它转不了int
作者: yangruijing    时间: 2015-3-5 10:52
int s = "s"+2; 编译不通过,是因为“s”是一个字符串,不能用ASIC编码表示
int s1 = 's'+2; 编译能通过,是因为's'是一个字符,而所有的字符,都有对应的ASIC编码表示
所以在与整数进行运算时,是以ASIC编码进行的运算

作者: linder_qzy    时间: 2015-3-6 08:57
路文龙 发表于 2015-3-5 10:28
字符串在内存中是以char[]字符数组类型存储的,字符char在内存中是以它的unicode编码存储的比如's'的编码十 ...

谢谢哈 没有想到是这么回事
作者: linder_qzy    时间: 2015-3-6 08:59
yangruijing 发表于 2015-3-5 10:52
int s = "s"+2; 编译不通过,是因为“s”是一个字符串,不能用ASIC编码表示
int s1 = 's'+2; 编译能通过, ...

谢谢啊 明白了 没有想到是ASIC的问题
作者: 竹叶君子    时间: 2015-3-6 09:57
整形跟字符串形相加得到的结果也是字符串类型的,而字符类型在与整形相加时,会自动转换为整形
作者: wuyiai    时间: 2015-3-6 10:13
第一个返回的结果为字符串
作者: huangchunwei    时间: 2015-3-6 10:18
简单来说,byte,short,char,它们三个是同一级别的,在进行算数运算时,都可以自动转换成int类型的。
int s1 = 's'+2;当然编译可以通过了。




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