Java方法参数是引用调用还是值调用?
我们首先用一段代码来证实一下为什么Java的对象参数传递是值调用。上面的结果让人很失望,虽然形参对象e1,e2的内容交换了,但实参对象worker,manager并没有互换内容。这里面最重要的原因就在于形参e1,e2是实参worker,manager的地址拷贝。如果大家对JVM内存管理中Java栈 的局部变量区 有所了解的话,就很好理解上面这句话。在JVM运行上面的程序时,运行main方法和swap方法,会在Java栈中先后push两个叫做栈帧 的内存空间。当e1和e2的引用发生交换时,下面的图很清晰的看出完全不会影响worker和manager的引用值。实际上,Java对象的传递就符合这个定义,只不过形参和实参所储存的内容并不是常规意义上的变量值,而是变量的地址。不同的变量名并不能说明占用的内存存储空间不同。
用户评论