Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当集合或数组作为参数传递时,Java是按值传递还是按引用传递?_Java - Fatal编程技术网

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

当集合或数组作为参数传递时,Java是按值传递还是按引用传递?,java,Java,问题:Java是按值传递还是按引用传递?这是一次采访中提出的问题 答:在大多数Java书籍中,Java都是按值传递的。所以我说了这个答案。但面试官给了我一个arraylist的例子。在这里,我们将一个arraylist传递给函数,在这个函数中,我们删除了一个元素,该元素会反射回原始数组。这意味着Java还支持按引用传递。 我很困惑,所以问你们所有人这个问题 ArrayList的示例: public static void functionToRemoveAnElement(List<Str

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

答:在大多数Java书籍中,Java都是按值传递的。所以我说了这个答案。但面试官给了我一个arraylist的例子。在这里,我们将一个arraylist传递给函数,在这个函数中,我们删除了一个元素,该元素会反射回原始数组。这意味着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

调用函数之前:nihant2

调用函数之前:nihant3

调用函数之前:nishant4

调用函数之前:nishant5

调用函数之前:nishant6

调用函数之前:nihant7

调用函数后:nishant2

调用函数后:nishant3

调用函数后:nishant4

调用函数后:nishant5

调用函数后:nishant6

调用函数后:nishant7


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

Java始终按值传递,如果对象引用值将被复制到函数参数。

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

Java始终是按值传递的。总是对于引用类型,将传递一个引用值。重复@NishantM,只需反复阅读答案,直到获得答案。更改引用是避免使用此类术语的原因!变量不是引用,引用也不能更改,就像0不能更改为其他数字一样。@user2864740我更喜欢说指针,因为Java中的引用就是指针,但在Java世界中它似乎是一个四个字母的单词-不,指针更糟糕,出于同样的原因仍然是错误的。相反,在“按值调用”下,对[parameter]变量的重新分配对调用方绑定没有影响。即使在重新分配的情况下,参考值本身也不会改变。呃,我只想用核武器来回答。这显然已经在别处得到了很好的回答-我只是在为精确的语言而努力!除息的