黑马程序员技术交流社区
标题:
char数组遇到的一个问题!
[打印本页]
作者:
余银桂
时间:
2012-6-23 02:03
标题:
char数组遇到的一个问题!
本帖最后由 余银桂 于 2012-6-23 11:55 编辑
public class Test6
{
public static void main(String args[])
{
char[] c1= new char[]{'1','2','3'};
System.out.println(c1);
}
}
复制代码
首先我想问的是 char数组和 其它数组有啥区别?
这段代码我运行的结果居然是 123
按照int数组,运行结果应该是对应的地址值
char [] c1 = new char[]{'1','2','3'}; 这段代码在内存中是怎么分配的?
作者:
王涛
时间:
2012-6-23 02:21
String.valueOf、StringBuffer.append以及System.out.print中都对char[]数组进行了的单独处理,
即进行了重载,使之可以输出内容,而不是地址。
但是字符串拼接操作没有对char[]数组单独处理,所以它处理的是数组char[]的地址
看下面的代码:
public class CharTestDemo{
public static void main(String[] args){
String letters = "abc";
char[] numbers = {'1', '2', '3'};
System.out.println(letters + " " + numbers);
//System.out.println( numbers);
}
}
这个输出的就是abc [C@c17164
作者:
曾_强
时间:
2012-6-23 04:16
这个原因主要是输出语句中System.out.println中调用了PrintStream类中的println(char x[])方法,当是字符数组时,直接将字符数组元素打印出来。只是恰好System类中的打印方法PrintStream可以直接打印字符数组类型。
源文件代码如下:传入为char x[]数组时
public void println(char x[]) {
synchronized (this) {
print(x);
newLine();
}
}
复制代码
传入为char buf[] 数组时:
private void write(char buf[]) {
try {
synchronized (this) {
ensureOpen();
textOut.write(buf);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush) {
for (int i = 0; i < buf.length; i++)
if (buf[i] == '\n')
out.flush();
}}}}
复制代码
还有 char s[]时:
public void print(char s[]) {
write(s);
}
复制代码
另外:只能是
System.out.println(c1);
能够将字符数组按元素打印出来。即输出:123;
若是
System.out.println("c1="+c1);
此时则不能将元素输出。结果将为charl类型数组的哈希值:c1=[C@51da6868
作者:
余银桂
时间:
2012-6-23 11:55
谢谢了,昨晚自己没事也找了一下资料,大概知道了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2