按值传递 pk 按址传递(Java)
String=>Aft?? t:0
*///:~结论:按址传递
??? 最终结论:在Java中,为类的方法传递参数时,本身的传递机制是按址传递。那么,为什么打印的结果会不一样呢?主要是由赋值符号“=”造成的,众所周知,在Java中,一切都是对象,所以即便是个数字、字符,或者字符串,都被称为是对象。在Java中,规定的赋值(“=”)机制是按址传递,即将对象的地址赋给引用(即把对象的地址赋给“=”左侧的变量),所以每出现一次赋值语句,左侧变量的地址都会发生改变。既然这样,那么为什么在Test2、3、4中最后打印t的值时却没有改变呢?这就是程序本身的迷惑性造成的,其实change方法内部的t与该方法外的t不是一个引用,如果把change参数的t改为其他名字你就明白了,这就是故意用来迷惑不成熟的程序员的。在传递参数时,首先要新生成参数列表中的虚参变量,然后将传递的实参的对象地址赋给虚参,这样就完成了Java中的参数传递。
?????? 因此,当在一个方法内部改变方法外面的某个对象的值时,一定要注意“=”的迷惑性(“=”只传址,不传值)。
?????? 总之一句话,在Java中传的都是地址,不是值!