今天看了一个树结构的实现,StringBuffer无法正确显示 改成String就好了 有点疑问就写了下面的test
- Java code
public class Test { public static void main(String []args){ int s = 123; String m = "123"; Ani a = new Ani(); a.change(s); System.out.println(s); a.change(m); System.out.println(m); StringBuffer t= new StringBuffer("123"); a.change(t); System.out.println(t); StringBuffer t2= new StringBuffer("123"); a.change2(t2); System.out.println(t2); }}class Ani{ public void change(int s){ s=123456; } public void change(String m){ m+="456"; } public void change(StringBuffer t){ t.append("456"); } public void change2(StringBuffer t2){ t2 = new StringBuffer("000"); }}
结果是:
- Java code
123123123456123
int,String 都没有因为调用方法而改变,觉得是传值。
StringBuffer t调用change改变,觉得应该是传引用。。
StringBuffer t2调用change2赋予参数新的引用,但是打印出来却没有变。
求高手解答Java到底是传值还是传引用?
------解决方案--------------------
1、 如果参数是基本数据类型(int、long等),传值。方法内部改变参数值,外部值不变。
2、 如果参数是对象类型,传地址。方法内部改变对象值,外部对象值改变。但是,如果方法内部调用new重新构建参数对象,外部对象仍然记录构造前的对象值。
------解决方案--------------------
感谢,String应该也不是基本类型,为什么change()后原值未改变?
回答 :String 不是基本类型 ,一般的String 都在常量池 中的
------解决方案--------------------
------解决方案--------------------
看完这个博客,楼主应该明白了
http://blog.csdn.net/niuniu20008/article/details/2953785