Java参数传递是pass-by-value的, modify()方法传入的r1, r2 均为复制句柄, 分别指向sb1, sb2.
但是 r1 = null; 令r1重新初始化, 此时r1与sb1指向已经不同, 因此sb1 未被修改
而r2与sb2的指向始终一致, 都是 "pears" 那个StringBuffer对象, 因此修改r2同时令sb2也被修改成为 "pears taste good".

解决方案 »

  1.   

    至于int a参数, 基本类型根本没有指针引用, 自然不会变更, 那就不用解释了 ^_^
      

  2.   

    java在调用方法的时候可不是简单的值传递。
    对于原始类型,例如int,double等都是值传递,而对于类来说,例如StringBuffer,一般都是地址传递。但要注意String这个类,因为JVM对String的内存分配策略不同,所以String类也是值传递。
    这里有一篇不错的文章http://www.csdn.net/Develop/article/22%5C22025.shtm,讲的很清楚。
      

  3.   

    呵呵, alphafish(alphafish)理解有误, 即使对于对象, java还是按值传递的, 不过复制的是对象的指针, 两者指向同一个实际对象, 这样一来表现形式是pass-by-refrence, 但实际还是pass-by-value的. 我当初也是像你这么理解的, 看了Pratical Java才搞清楚
      

  4.   

    JAVA究竟是安值传递还是pass by referrence是有争议的,SIA请不要说的太绝对,每个人的理解不太一样而已。
      

  5.   

    to SIA(似是而非):
    我又看过几个例子,感觉你说的比较正确,我原来的理解的确有误区。谢谢你对我错误理解的纠正。thank you!