问题的引出:
参考文献:Java Puzzlers -〉Chapter 3. Puzzlers with Character -〉Puzzle 12: ABC
例程:
public class Abc {
public static void main(String[] args) {
String letters = "ABC";
char[] numbers = { '1', '2', '3' };
System.out.println(letters + " easy as " + numbers);
}
}
输出: ABC easy as [C@16f0472 而不是 ABC easy as 123
原因:字符串连接的时候,首先调用相应的toString()方法转换成String,char[]的 toString方法继承自Object。 另: 之所以我们println()的时候char[]表现的正常,是因为里面out里面提供了一个 char[]的重载版本,同样,String.valueOf()中也有char[]的重载版本。
解决办法:所以解决办法是做一个显示的转换,将char[]转换成String,或者将println拆行,或者调用String.valueOf(),具体做法见原书
但其实我写这个问题真正想说的是下面两点:
01.关于eclipse与jbuilder的一个比较。
将上述代码录入eclipse,eclipse会产生警告信息:必须显式地将 char[] 转换为字符串; 但是录入jbuilder不会有相应的提示。
因为在开始搞java的时候还没有eclipse,所以其实我是一直使用jbuilder过来的,后来 也用IBM Rational software Architecture,因为开发web是eclipse上有很多好用的插件开始使用 eclipse,但一直觉得eclipse不如jbuilder的强大,觉得eclipse的很多插件bug多,通过这件事,原来IDE也真如语言一样各 有所长。 没有任何东西在任何方面都领先对手的。人也一样,有强人,无恒强人。
02.另一个教训就是大师们一直强调的:不要忽略编译器的警告.