当集合或数组作为参数传递时,Java是按值传递还是通过引用传递?

时间:2014-05-23 06:59:13

标签: java

问题:Java是按值传递还是按引用传递?这是在一次采访中提出的问题。

答案:在大多数Java书籍中,Java都是按值传递的。所以我告诉了这个答案。但是面试官给了我一个arraylist的例子。我们将arraylist传递给function()并在此函数中删除一个元素,并将其反射回原始数组。这意味着Java还支持通过引用传递。 我很困惑,所以向大家提问。

ArrayList示例:

public static void functionToRemoveAnElement(List<String>strs){
    strs.remove(0);

}   



  public static void main(String args[]) {
        List<String> strs = new ArrayList<String>();

        strs.add("nishant1");
        strs.add("nishant2");
        strs.add("nishant3");
        strs.add("nishant4");
        strs.add("nishant5");
        strs.add("nishant6");
        strs.add("nishant7");
                for(String str : strs){
            System.out.println("Before Calling Function : "+str); 
                    //here it will print all the values
        }

        functionToRemoveAnElement(strs);

                for(String str : strs){
            System.out.println("After Calling Function : "+str);
                //here it will not print nishant1 after calling function()
    }
}

对于那些说价值不会改变的人来说,这是O / P.                      在调用函数之前:nishant1

调用函数前:nishant2

调用函数之前:nishant3

调用函数之前:nishant4

调用函数前:nishant5

调用函数之前:nishant6

调用函数之前:nishant7


调用函数后:nishant2

调用函数后:nishant3

调用函数后:nishant4

调用函数后:nishant5

调用函数后:nishant6

调用函数后:nishant7

我们可以看到在调用之后nishant1不存在,因为我们正在移除第一个元素。

2 个答案:

答案 0 :(得分:1)

Java所有方式按值传递,如果Object参考值将被复制到函数参数。

答案 1 :(得分:1)

Java 总是传递值。但是,当您传递对函数的引用时,您可以更改引用指向的对象。但是,如果更改函数内部的引用,则不会影响调用者。