黑马程序员技术交流社区

标题: java对数组角标的默认操作是什么样的? [打印本页]

作者: 杨武刚    时间: 2011-7-26 16:45
标题: java对数组角标的默认操作是什么样的?
这两天调程序的时候,发现了个问题:
char[] char1 = {'a','b','c','d','e','g','h','i','j','k'};
运行System.out.println(char1['3'-'0']);没有问题
但是System.out.println(char1['3']);不行,显示存储了非法数值
前面的这句好理解,是程序运行表达式后默认进行了数据类型转换了,运行
System.out.println(char1[(int)('3'-'0')]);
都没问题也验证了这点,
但是,运行以下这几句也没问题,正常显示结果,就让俺搞不明白了
System.out.println(char1[('3'-'0')]);
System.out.println(char1[(char)('3'-'0')]);
System.out.println(char1[(char)(3)]);
作者: 匿名    时间: 2011-7-26 16:49
char类型会被自动转换成int的,在255以内,char和int被认为是等价的。
不过我觉得还是不要纠结这些问题的好。作为程序员,代码应该方便人阅读不是。省得别人摸不到头脑
作者: 匿名    时间: 2011-7-26 16:53
char[下标应该是Int型把。。]
作者: 匿名    时间: 2011-7-26 17:29
标题: 回复 张宇鹏 的帖子
谢谢了,学习了。张宇鹏的分析,我觉得很对
作者: 崔虎    时间: 2011-7-26 18:17
我想您应该把错误的信息说清楚,明明是数组越界异常,您却简单的说成了参数非法。
代码如下:[code=java]package org.cxy.demo;

public class Demo {
        public static void main(String[] args) {
                char[] char1 = {'a','b','c','d','e','g','h','i','j','k'};
                System.out.println(char1['3']);
        }
}[/code]异常如下:[code=java]Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 51
        at org.cxy.demo.Demo.main(Demo.java:6)[/code]原因:
字符“3”的 ASCII码为51 。char1['3']其实和char1[51]是等价的。[code=java]array //其中i的数据类型可以是 byte、int、short、char中的任意一种。[/code]
[ 本帖最后由 崔虎 于 2011-07-26  18:33 编辑 ]
作者: 匿名    时间: 2011-7-27 10:09
标题: 回复 崔虎 的帖子
崔哥,你批评的是,受教受教,这问题总算彻底搞明白了。以后得细心了




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