通过引用方法传递参数的正确和最佳方法是什么?

时间:2014-03-21 09:51:57

标签: java parameter-passing pass-by-reference

这是我的代码:

import java.util.LinkedList;

public class Main {


    public static void main(String[] args) {
        String str = new String("this is a text");
        System.out.println(str);
        getThis(str);
        System.out.println(str);

    }

    private static void getThis(String str) {
         str = "text changed"; 
    }

}

,输出为:

this a text
this a text

我想在调用str方法之后更改getThis

我知道我应该通过引用传递str,并且我知道这可以通过将str声明为static并从main方法中声明来完成在像Main.str这样的方法中调用它。但这是通过引用传递的正确方法和标准方式吗?

3 个答案:

答案 0 :(得分:3)

Java不是通过引用传递的,它总是按值传递。并提供参考。

它将引用作为值传递给调用者。您可以通过从String方法返回getThis()值并将其分配到同一变量

来执行此操作
public class Main {


    public static void main(String[] args) {
        String str = new String("this is a text");
        System.out.println(str);
        str = getThis();
        System.out.println(str);

    }

    private static String getThis() {
         return "text changed"; 
    }

}

答案 1 :(得分:3)

正如其他人所说,Java总是按值传递,但有一点需要注意,当你传入对象(比如String)时,你会将一个Reference的值传递给堆上的一个对象。

在您的示例中,赋值在方法之外没有任何影响,因为字符串是不可变的,所以您无法做很多事情。如果你传入一个StringBuilder,那么你可以改变堆上对象的状态。

更一般地,您可以传入包含set方法的包装器对象,而不是传入Object x。 Java提供了一个AtomicReference,允许您执行此操作。

答案 2 :(得分:-1)

在java中,“对象的引用按值传递”。所以,任何 对您传递的非基本对象的引用将直接引用 使用和更改将反映在原始对象中。

另外,作为附注,字符串是不可变的,所以,你 如果你试图改变它将获得一个新的字符串(字符串不能更改),原始字符串将不会被更改。