问题: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不存在,因为我们正在移除第一个元素。
答案 0 :(得分:1)
Java所有方式按值传递,如果Object
参考值将被复制到函数参数。
答案 1 :(得分:1)
Java 总是传递值。但是,当您传递对函数的引用时,您可以更改引用指向的对象。但是,如果更改函数内部的引用,则不会影响调用者。