求char[]+String字符串输出的是什么?该怎么处理

求char[]+String字符串输出的是什么?
char[] ch={'a'};
String str="b";
System.out.println(ch+str);
为什么打出的是地址+字符串??
而不是纯字符串?
------解决思路----------------------
因为你把字符数组输入进去了。。。。所以会有地址,你这么输出就是你想要的
System.out.println(ch[0]+str);

------解决思路----------------------
在java中,Sytem.out.println()底层调用的是PrintStream的println()操作,PrintStream的println()操作提供也很多重载方法,如下图:
求char[]+String字符串输出的是什么?该怎么处理
下面通过prinln()做一些测试及解释,代码如下:

/**
 * @author zhuangqing
 */
public class Test {
    public static void main(String[] args) {
        char[] c = {'c'};
        MyObj obj = new MyObj();
        String str = "hello";
        System.out.println(c);//将输出c

//        System.out.println(c + obj);//非String对象之间不允许+操作

        /**
         * 数组底层实现也是一个java类对象(JVM级别的类,API找不到的)
         * 非String对String对象操作,将调用非String对象的toString方法(数组对象的toString结果就是楼主看到的地址描述))转为String与String做+操作
         * +操作底层是调用StringBuilder做append操作
         */
        System.out.println(c+str);
        System.out.println(obj + str);
    }
}
class MyObj {

}

另外说明下,数组是一个对象。println()方法 中有println(char[] c) 和println(Object c)2个方法 。根据java的方法调用参数类型自下向上适配的特性,会选择调用println(char[] c)。而println(char[] c)底层是通过BufferWriter的witer()实现的,如下代码:

private BufferedWriter textOut;
private void write(String s) {
try {
    synchronized (this) {
ensureOpen();
textOut.write(s);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush && (s.indexOf('\n') >= 0))
    out.flush();
    }
}

------解决思路----------------------
把其他东西和String用+运算会依次调用它们的toString方法
System.out.println(new String(ch) + str);可以输出ab