Java参数传递及值传递实现原理详解
java方法参数的传递有两种,值传递和引用传递。
1.按值传递:
参数类型是int,long等八大基本数据类型时,参数传递的过程是按值拷贝的过程
如下代码
publicstaticvoidmain(String[]args){
inta=5;
fun(a);
System.out.println(a);//输出结果为5
}
privatestaticvoidfun(inta){
a+=1;
}
2.按引用传递
参数类型为引用类型,参数传递的过程采用拷贝引用的方式
publicclassTest{
publicstaticvoidmain(String[]args){
Aa=newA(5);
fun(a);
System.out.println(a.a);//输出结果为6
}
privatestaticvoidfun(Aa){
a.a+=1;
}
staticclassA{
publicinta;
publicA(inta){
this.a=a;
}
}
}
再看下面这种情况:
publicclassTest{
publicstaticvoidmain(String[]args){
Integera=5;
fun(a);
System.out.println(a);//输出结果为5
}
privatestaticvoidfun(Integera){
a+=1;
}
}
这里明明是引用传递,为什么没有改变对象的值呢?
这里其实使用了基本数据类型封装类的自动装箱功能。
Integera=5,编译后实际为Integera=Integer.valueOf(5),查看Integer的源码,并没有改变原对象的值,只是将其引用指向了另一个对象。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。