数组在Java中不是基本类型,但它们也不是对象,因此它们是通过值传递还是通过引用传递?它是否取决于数组所包含的内容,例如引用或基本类型?
当前回答
Java中的所有东西都是通过值传递的。
对于数组,引用被复制到一个新的引用中,但请记住,Java中的所有内容都是通过值传递的。
看看这篇有趣的文章,了解更多信息…
其他回答
不,那是不对的。数组是Java中的特殊对象。这就像传递其他对象一样,你传递的是引用的值,而不是引用本身。这意味着,在被调用例程中更改数组的引用将不会反映在调用例程中。
Java中的所有东西都是通过值传递的。
对于数组,引用被复制到一个新的引用中,但请记住,Java中的所有内容都是通过值传递的。
看看这篇有趣的文章,了解更多信息…
Java中的所有东西都是通过值传递的。对于数组(它只是一个对象),数组引用是按值传递的(就像对象引用是按值传递的)。
当你将一个数组传递给其他方法时,实际上该数组的引用被复制了。
通过该引用对数组内容的任何更改都会影响原始数组。 但是将引用更改为指向新数组并不会更改原方法中现有的引用。
请参阅这篇文章:Java是“引用传递”还是“值传递”?
请看这个工作示例:
public static void changeContent(int[] arr) {
// If we change the content of arr.
arr[0] = 10; // Will change the content of array in main()
}
public static void changeRef(int[] arr) {
// If we change the reference
arr = new int[2]; // Will not change the array in main()
arr[0] = 15;
}
public static void main(String[] args) {
int [] arr = new int[2];
arr[0] = 4;
arr[1] = 5;
changeContent(arr);
System.out.println(arr[0]); // Will print 10..
changeRef(arr);
System.out.println(arr[0]); // Will still print 10..
// Change the reference doesn't reflect change here..
}
有点像骗人的房产…甚至在Java中引用也是按值传递的,因此对引用本身的更改是在被调用的函数级别上进行的。编译器和/或JVM通常会将值类型转换为引用。
数组实际上是对象,因此传递的是引用(引用本身是按值传递的,不明白吗?)简单的例子:
// assuming you allocated the list
public void addItem(Integer[] list, int item) {
list[1] = item;
}
您将看到调用代码对列表的更改。但是你不能改变引用本身,因为它是通过值传递的:
// assuming you allocated the list
public void changeArray(Integer[] list) {
list = null;
}
如果传递一个非空列表,在方法返回时它将不是空的。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 使用C返回一个数组
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 向对象数组添加属性
- 在Java流是peek真的只是调试?