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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邹铭钰 中级黑马   /  2013-4-6 23:22  /  1507 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邹铭钰 于 2013-4-7 15:39 编辑
  1. public static void main(String[] arge)
  2. {
  3. String x = "12345678";

  4. for(int i=0; i<x.length(); i++)
  5. {
  6. System.out.print(x.charAt(i)+"  ");
  7. }

  8. System.out.println();

  9. for(int i=0; i<x.length(); i++)
  10. {
  11. int m = x.charAt(i);
  12. System.out.print(m+"  ");
  13. }
  14. }
复制代码
输出结果:1  2  3  4  5  6  7  8
                 49  50  51  52  53  54  55  56

为何得到的值不一样啊???

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 很细心!继续努力!

查看全部评分

7 个回复

倒序浏览
因为charAt(int index)这个方法返回的值是是字符型类型,你前面要的是int  型,他会自动提升数据类型为int
此时返回的是ASCII吗值,字符'1','2','3','4','5','6','7','8'   对应的ASCII值就是49  50  51  52  53  54  55  56

评分

参与人数 1黑马币 +9 收起 理由
张熙韬 + 9

查看全部评分

回复 使用道具 举报
你通过charAt查找下标输出的值是char类型,用得接收值是int类型,肯定跟你以前的不一样 .
将int改成char类型就收就正常了.
代码如下:
class test
{
        public static void main(String[] arge)
{
String x = "12345678";

for(int i=0; i<x.length(); i++)
{
System.out.print(x.charAt(i)+"  ");
}

System.out.println();


for(int i=0; i<x.length(); i++)
{
char m = x.charAt(i);
System.out.print(m+"  ");
}
}
}

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
第一个你是直接输出了字符,第二个你是把字符强制转换成了了int型再输出
回复 使用道具 举报
int m=x.charAt(i)这句话你把字符赋给了一个int类型的变量,所以字符也就变成了相应的ASCII编码值了 ,而0对应的是48,1对应的就是49了,以此类推就是
你第二次输出的结果了
回复 使用道具 举报
哦,知道了,感谢。那要怎样可以使得第二个输出语句输出和第一个输出语句一样的结果呢??
回复 使用道具 举报
就是 m 的类型不变,但是输出时怎么转换成 和第一列输出的结果一样?
回复 使用道具 举报
那个叫,低位向高位赋值,有个自动提升的东东在作怪。  为了避免作怪么,  把int  改成char就行了,因为你已经把那些数字定义成字符了,就要将那些数字当成字符去看待,
数字在ASC表中也是有对应的,  你用int 其实打印的就是数字在ASC表对应的数值。 不信的话你可以查查ASC表值/
嗯,应该就是这个原因了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马