求char[]+String字符串输出的是什么?该怎么处理
求char[]+String字符串输出的是什么?
char[] ch={'a'};
String str="b";
System.out.println(ch+str);
为什么打出的是地址+字符串??
而不是纯字符串?
------解决思路----------------------
因为你把字符数组输入进去了。。。。所以会有地址,你这么输出就是你想要的
------解决思路----------------------
在java中,Sytem.out.println()底层调用的是PrintStream的println()操作,PrintStream的println()操作提供也很多重载方法,如下图:
![求char[]+String字符串输出的是什么?该怎么处理 求char[]+String字符串输出的是什么?该怎么处理](/default/index/img?u=aHR0cDovL3d3dy5teWV4Y2VwdGlvbnMubmV0L2ltZy8yMDE1LzA5LzI1LzEyNDczNzIucG5n)
下面通过prinln()做一些测试及解释,代码如下:
另外说明下,数组是一个对象。println()方法 中有println(char[] c) 和println(Object c)2个方法 。根据java的方法调用参数类型自下向上适配的特性,会选择调用println(char[] c)。而println(char[] c)底层是通过BufferWriter的witer()实现的,如下代码:
------解决思路----------------------
把其他东西和String用+运算会依次调用它们的toString方法
System.out.println(new String(ch) + str);可以输出ab
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()操作提供也很多重载方法,如下图:
下面通过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