众所周知,通过值传递和引用传递是Java传递方法的两种方法参数。对于按值传递和参考传递分别是什么、不变对象值为何等一系列问题,本文将予以解答。
第一问:什么是按价值传递?
参数型别为int、long等基本资料型别(八种主要资料型别),并以值复制的方法传递参数。
代码片段:
公共类测试{
publicstaticvoidmain(string[]args){
inta=5;
fun(a);
system.out.print(a);//输出结果是5。
}
privatestaticvoidfun(inta){
a+=1;
}
}
第二问:什么是参考传递?
参数值类型是参考类型,而参数传递的过程则是复制引用。
代码片段:
公共类测试{
publicstaticvoidmain(String[]args){
Aa=newA(5);
fun(a);
system.out.print(a.a);//输出结果是6。
}
privatestaticvoidfun(Aa){
a.a+=1;
}
静态classA{
publicinta;
publicA(inta){
this.a=a;
}
}
}
明明是参考传递,为何不更改物件的值?
代码片段:
公共类测试{
publicstaticvoidmain(String[]args){
整数=5;
fun(a);
system.out.print(a);//输出结果是5。
}
privatestaticvoidfun(Integera){
a+=1;
}
}
由于实际上在此使用基本数据类型来封装类的自动装箱功能。
Integera=5,经过编译的实际Integera=Integer.valueOf(5)查看Integer的源代码,并且不更改原始对象的值,只是它的引用指向另一个对象。