黑马程序员技术交流社区

标题: String类中的一个问题 [打印本页]

作者: 邹铭钰    时间: 2013-4-6 23:22
标题: String类中的一个问题
本帖最后由 邹铭钰 于 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

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

作者: 黑马19我最牛    时间: 2013-4-6 23:39
因为charAt(int index)这个方法返回的值是是字符型类型,你前面要的是int  型,他会自动提升数据类型为int
此时返回的是ASCII吗值,字符'1','2','3','4','5','6','7','8'   对应的ASCII值就是49  50  51  52  53  54  55  56
作者: luguoyuanf    时间: 2013-4-6 23:40
你通过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+"  ");
}
}
}
作者: 何红卫    时间: 2013-4-6 23:40
第一个你是直接输出了字符,第二个你是把字符强制转换成了了int型再输出
作者: 李道福    时间: 2013-4-6 23:45
int m=x.charAt(i)这句话你把字符赋给了一个int类型的变量,所以字符也就变成了相应的ASCII编码值了 ,而0对应的是48,1对应的就是49了,以此类推就是
你第二次输出的结果了
作者: 邹铭钰    时间: 2013-4-6 23:50
哦,知道了,感谢。那要怎样可以使得第二个输出语句输出和第一个输出语句一样的结果呢??
作者: 邹铭钰    时间: 2013-4-6 23:54
就是 m 的类型不变,但是输出时怎么转换成 和第一列输出的结果一样?
作者: 、__WSD吴少东    时间: 2013-4-7 00:29
那个叫,低位向高位赋值,有个自动提升的东东在作怪。  为了避免作怪么,  把int  改成char就行了,因为你已经把那些数字定义成字符了,就要将那些数字当成字符去看待,
数字在ASC表中也是有对应的,  你用int 其实打印的就是数字在ASC表对应的数值。 不信的话你可以查查ASC表值/
嗯,应该就是这个原因了。




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