Java函数参数是否始终按值传递?

3 java parameters

关于如何在Java中传递参数的快速问题...

...
            if ((index = stdout.indexOf(pattern)) != -1) {
                tidy(stdout, index + pattern.length());
                return true;
            } else if ((index = stderr.indexOf(pattern)) != -1) {
                tidy(stderr, index + pattern.length());
                return true;
...

    private void tidy(StringBuffer buffer, int i) {
        logger.info("Truncating buffer: " + buffer);
        buffer = new StringBuffer(buffer.substring(i));
        logger.info("Buffer now: " + buffer);
    }

在这种情况下,stdout和stderr(用作tidy()中的参数)是否将其值更改为新的StringBuffer(buffer.substring(i))?我的假设是它们作为对象变量(对象指针)总是按值传递?

Nic*_*yer 14

你错误地说明了这里发生的事情 - 对象引用是按值传递的(引用的副本是),因此当你调用整数时,stdout和stderr 不会被修改.执行第2行时,会修改由它们组成的副本tidy.

Java中的参数传递是很多人混淆的根源.这是一个很好的解释.