黑马程序员技术交流社区
标题:
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