Java函数参数是否总是按值传递? [英] Are Java function parameters always passed-by-value?

查看:100
本文介绍了Java函数参数是否总是按值传递?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一个简单的问题,关于如何在Java中传递参数...

Just a quick question about how parameters are passed in 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))吗?我的假设是它们将作为对象变量(对象指针)始终按值传递吗?

In this case, will stdout and stderr (used as parameters in tidy()) have their values changed to new StringBuffer(buffer.substring(i))? My assumption is that they will as object variables(object pointers) are always passed-by-value?

推荐答案

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

You misstate what is going on here -- the object references are passed by value (a copy of the reference is made), so stdout and stderr do not get modified when you call tidy. The copies that are made of them get modified when you execute line 2 of tidy.

Java中的参数传递对于很多人来说是一个混乱的根源.这是一个很好的解释.

Parameter passing in Java is a source of confusion for a lot of people. Here's a good explanation.

这篇关于Java函数参数是否总是按值传递?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆