关于String中toString返回的this问题

Packer_Z 发布于 2017/08/03 19:30
阅读 197
收藏 0

大家都知道用println打印引用数据类型的时候会调用toString方法,可是在看String源码的时候,看到toString中返回的是this,为什么打印的时候会把具体的值打印出来,值不是存在于char的字符数组里吗?

加载中
0
battyman
battyman

println函数没有调用String的toString方法吧,调的是getChars方法

0
tcxu
tcxu

API 文档显示, 类 Object 的 toString() 方法 返回的是 String  数据类型,返回该对象的字符串表示, 并 不是 this.  Java 代码定义的任何一个类,都是 Object 的子类。如果你覆盖了 toString(), 则返回你覆盖的内容。否则,返回该对象的字符串表示。

0
y
yozen17

这个问题应该看println(String s)

这个方法最终调用了Writer的public void write(String str, int off, int len) throws IOException方法:

贴源码:

public void write(String str, int off, int len) throws IOException {
        synchronized (lock) {
            char cbuf[];
            if (len <= WRITE_BUFFER_SIZE) {
                if (writeBuffer == null) {
                    writeBuffer = new char[WRITE_BUFFER_SIZE];
                }
                cbuf = writeBuffer;
            } else {    // Don't permanently allocate very large buffers.
                cbuf = new char[len];
            }
            str.getChars(off, (off + len), cbuf, 0);
            write(cbuf, 0, len);
        }
    }

如1楼所说, println(String s)不会调用toString()方法,打印String最终会调用getChars方法

 

返回顶部
顶部