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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨武刚 黑马帝   /  2011-7-26 16:45  /  2782 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这两天调程序的时候,发现了个问题:
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)]);

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

5 个回复

倒序浏览
黑马网友  发表于 2011-7-26 16:49:53
沙发
char类型会被自动转换成int的,在255以内,char和int被认为是等价的。
不过我觉得还是不要纠结这些问题的好。作为程序员,代码应该方便人阅读不是。省得别人摸不到头脑

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-26 16:53:36
藤椅
char[下标应该是Int型把。。]
回复 使用道具 举报
黑马网友  发表于 2011-7-26 17:29:27
板凳

回复 张宇鹏 的帖子

谢谢了,学习了。张宇鹏的分析,我觉得很对
回复 使用道具 举报
我想您应该把错误的信息说清楚,明明是数组越界异常,您却简单的说成了参数非法。
代码如下:[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 编辑 ]

评分

参与人数 1技术分 +3 收起 理由
admin + 3 很不错!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 10:09:34
地板

回复 崔虎 的帖子

崔哥,你批评的是,受教受教,这问题总算彻底搞明白了。以后得细心了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马