如何理解JAVA 参数传递总是值传递(pass-by-value )
来源:互联网 发布:哪里有淘宝号买 编辑:程序博客网 时间:2024/05/17 02:49
有人说java 参数传递在对primitive类型的参数传递时候是值传递,对对象参数的传递是引用传递。
可是JAVA规范里面却说的是总是值传递。
看看这个图就理解了。
对传入的参数总是有个copy的过程。
因为primitive类型的参数在JVM中,参数中存储的就是本身的值,copy后的参数和原来的参数就完全独立了。
对于对象类型的参数,参数中存储的是对象在heap中地址引用,copy后两个参数指向的是同一个地址引用,如果你对地址引用操作,操作的是同一个地方,所以原始的参数的Value也会变。
××如果对象类型的参数传递是在不同的JVM,如EJB调用,情况有会有不同,如果是localhome调用,仍然和上图一样,如果是remotehome,copy后的地址引用自然就和原始的不是一个地方了。
看看这个例子:
public class Car {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Car(String color) {
super();
this.color = color;
}
public static void second(Car d){
d = new Car("blue");
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
Car c = new Car("red");
second(c);
System.out.println(c.getColor()); //red
}
}
在上面的例子中:
public static void second(Car d){
d = new Car("blue");
}
操作的是d本身,而不是d的引用地址,d改变了,只是把d的引用地址指向了一个新的Car。
所以c是不变的。
- 如何理解JAVA 参数传递总是值传递(pass-by-value )
- 值传递(pass by value)
- java当中也有pass-by-value值传递或pass-by-reference地址传递吗
- Java 只有值传递(Pass By Value),没有引用传递(Pass By Reference)
- Java is Pass-by-Value Java都是值传递
- Java中都是值传递 pass-by-value
- Java is Pass-by-Value, Dammit! 我靠!Java就是值传递!
- Java中参数以by value方式而非by reference 方式传递(值传递)
- Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)
- java中参数传递详解:call by value(按值传递)和 call by reference(按引用传递)
- JAVA值传递(call by value)
- perl中子程序中参数的两种引用(传递)方式:pass by value and pass by Reference(传入引用)
- call by value 和call by reference 部分转载 java 值传递 和 引用传递
- Java call by value 和 by reference (值传递和引用传递)
- 读书笔记之java中参数传递by value而非by refernce
- 【Practical Java】实践1:参数以by value方式而非by reference方式传递
- 理解JAVA里的所有参数传递都是值传递
- Java参数传递,值传递
- 大家好!欢迎加入QQ技术交流群。
- C/C++编程新手错误语录(续二)
- Flex笔试 (面试题)
- 什么是Linux系统,Linux与UNIX系统区别和Linux的创始人简介
- 应用程序域
- 如何理解JAVA 参数传递总是值传递(pass-by-value )
- WTL(1) - 开发环境搭建
- .net framework3.5新特性(1):var、初始化、匿名类和扩展方法
- JFreeChart实时曲线
- jsp乱码解决终极解决方案
- jfreechart+sql实现时间曲线图(显示曲线数据点)
- 《中关村两个男人的斗争》外传——西直门
- 如何设置 LD_LIBRARY_PATH 变量
- XmlSerializer 常见问题疑难解答