标签:方式 java编程思想 按值传递 值传递 generated test void 因此 基本数据
最近在阅读《java编程思想》一书时,对作者关于java中的”引用(句柄)“的解释不太清楚,因此以实验的方式来讨论下java中一切皆”按值传递“这一说法,从而加深理解。
public class TestReference {
public static void testOne(int i){
i = 2;
System.out.println("test函数中的变量值:" + i);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 1;
TestReference.testOne(a);
System.out.println("main函数中的变量值:" + a);
}
}
运行结果:
test函数中的变量值:2
main函数中的变量值:1
由此可见:当参数为基本数据类型时,参数的传递为按值的拷贝传递
package test;
public class TestReference {
public static void testTwo(B c){
c.data = 2;
System.out.println("test函数中的变量值:" + c.data);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
B b = new B();
b.data = 1;
TestReference.testTwo(b);
System.out.println("main函数中的变量值:" + b.data);
}
}
运行结果:
test函数中的变量值:2
main函数中的变量值:2
由此可见:此例中函数的参数确实以拷贝地址的方式操作了实参变量。
public class TestReference {
public static void testThree(String str){
str = new String("new");
System.out.println("test函数中的变量值:" + str);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = new String("old");
TestReference.testThree(str);
System.out.println("main函数中的变量值:" + str);
}
}
运行结果:
test函数中的变量值:new
main函数中的变量值:old
由此可见:实参变量以拷贝地址的方式将对象地址传递给了形参变量,但在函数运行过程中,形参变量被赋予的新的对象的地址,因此此后对形参变量的操作与实参变量便不再有关系。
所谓“一切皆传值”对于基本数据类型,指的便是变量值得拷贝,而对于对象(或String、Integer等包装基本类型),指的是对象地址的拷贝,也就是说所传递的值是对象的地址。
标签:方式 java编程思想 按值传递 值传递 generated test void 因此 基本数据
原文地址:https://www.cnblogs.com/wunsiang/p/9456484.html