Java的值传递机制
来源:互联网 发布:js ready onload 编辑:程序博客网 时间:2024/05/17 06:45
我们知道在C/C++中有值传递和地址传递这两种概念,值传递会将实参复制一份,对它的改变并不会对原数据造成影响,而地址传递传递的是数据的地址,通过地址可以对原数据进行操作。
Java中好像没有地址这种概念,那它的传递到底是什么传递呢?这个似乎很难说清楚,比如下面的程序:
public class Test {
private int i;
Test() {
i = 0;
}
public static void main(String[] args) {
Test t=new Test();
System.out.println(t.i); //0
changeObject(t);
System.out.println(t.i); //1
int x=0;
System.out.println(x); //0
changeVariable(x);
System.out.println(x); //0
}
public static void changeObject(Test t) {
t.i++;
}
public static void changeVariable(int x) {
x++;
}
}
private int i;
Test() {
i = 0;
}
public static void main(String[] args) {
Test t=new Test();
System.out.println(t.i); //0
changeObject(t);
System.out.println(t.i); //1
int x=0;
System.out.println(x); //0
changeVariable(x);
System.out.println(x); //0
}
public static void changeObject(Test t) {
t.i++;
}
public static void changeVariable(int x) {
x++;
}
}
输出结果将是后面注释中所显示的,当一个Test的对象t作为参数的时候,我们改变了它,而当一个int的x作为参数的时候却没能改变。这似乎告诉我们Java中对与对象作为参数的情况实施的是地址传递,对简单类型的参数实施的是值传递。差不多是可以这样理解,但是Java中没有地址传递的概念,实际上都是值传递,那么为什么传递的t能够被修改呢?
要注意的是,Java中虽然没有地址的概念,但是有引用的概念,当我们Test t=new Test();的时候,实际上产生了两个对象,一个是Test类的实例,另一个就是对这个实例的引用,它就是t。作为我们参数的t实际上是一个对象的引用,而不是对象本身。为什么说Java里面是值传递?因为我们用t作为参数的时候,实际上会生成一个t的拷贝,这和简单类型的值传递没有什么区别。t的拷贝和t一样,同样会指向原来的那个Test实例,通过t的拷贝同样可以操作原实例对象,如此而已。
- Java的值传递机制
- Java方法参数的传递机制,值传递?引用传递?
- JAVA值传递机制
- Java方法的值传递机制
- java方法中参数的传递机制(值传递)
- java的参数传递机制
- java的参数传递机制
- Java值传递or引用传递机制
- java基础——方法参数的值传递机制
- 方法的参数传递机制——值传递机制
- java中方法的参数传递机制
- java中方法参数的传递机制
- Java方法的参数传递机制
- Java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- SQL Server 2005 CE软件环境需求
- fc.exe
- IDA 5.2 中文语言文件 by CCDebuger
- 电路板测试
- 怎样在asp.net 2.0的页面中播放视频文件?
- Java的值传递机制
- Spring的依赖关系(JAR)
- 接口设计 IDisk
- 在Ubuntu下安装VMware Tools的方法
- 在Ubuntu下安装VMware Tools导致鼠标滚轮不能用的问题的解决方法
- 用VMware实现ubuntu与Windows共享上网的方法
- Ubuntu 7.10的几个高速更新源及导入方法
- 解决Windows 2003 中Windows Media Player 10 的修复问题
- 解决 文件保护 SFC 要求插入正确的光盘的问题