当集合或数组作为参数传递时,Java是按值传递还是按引用传递?
问题:Java是按值传递还是按引用传递?这是一次采访中提出的问题 答:在大多数Java书籍中,Java都是按值传递的。所以我说了这个答案。但面试官给了我一个arraylist的例子。在这里,我们将一个arraylist传递给函数,在这个函数中,我们删除了一个元素,该元素会反射回原始数组。这意味着Java还支持按引用传递。 我很困惑,所以问你们所有人这个问题 ArrayList的示例:当集合或数组作为参数传递时,Java是按值传递还是按引用传递?,java,Java,问题:Java是按值传递还是按引用传递?这是一次采访中提出的问题 答:在大多数Java书籍中,Java都是按值传递的。所以我说了这个答案。但面试官给了我一个arraylist的例子。在这里,我们将一个arraylist传递给函数,在这个函数中,我们删除了一个元素,该元素会反射回原始数组。这意味着Java还支持按引用传递。 我很困惑,所以问你们所有人这个问题 ArrayList的示例: public static void functionToRemoveAnElement(List<Str
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]变量的重新分配对调用方绑定没有影响。即使在重新分配的情况下,参考值本身也不会改变。呃,我只想用核武器来回答。这显然已经在别处得到了很好的回答-我只是在为精确的语言而努力!除息的