Java关于值传递的问题,
基本数据类型以及基本类型数组元素均为值传递,即值的拷贝,传值后修改,不会改变原来的值
对象(数组,集合等),非基本类型数组元素为引用传递,传值后修改,会改变原来的值
字符串类型分情况讨论,如果是(String str)即引用传递,(“XXX”)值传递
详见
Java:按值传递还是按引用传递详细解说
http://blog.csdn.net/zzp_403184692/article/details/8184751Java值传递以及引用的传递、数组的传递!!
http://blog.csdn.net/niuniu20008/article/details/2953785
- public class Test{
- public void change(StringBuffer x,StringBuffer y){
- x.append(y);
- y=x;
- }
- public static void main(String[] args){
- StringBuffer buffA = new StringBuffer("a");
- StringBuffer buffB = new StringBuffer("b");
- new Test().change(buffA,buffB);
- System.out.println(buffA+","+buffB);
- }
- }
再看一题
public class pro29{
private String nn = new String("1");
private String[] mm = {"2","5"};
void test(String nn,String[] mm){
nn = new String("3");//如果没有this.nn="9";由于引用nn重新创建一个对象,此时nn值不变
this.nn = "9";
mm[0] = "4";//非基本类型的数组传递是引用传递,值会被改变
System.out.println("in test(),mm[0]: "+mm[0]);
mm = new String[]{"8","7"};//重新创建一个字符串数组,不会改变原值
System.out.println("in test(),nn: "+nn);
System.out.println("this.nn: "+this.nn);
System.out.println("mm[0]: "+mm[0]);
}
public static void main(String[] args){
pro29 s = new pro29();
s.test(s.nn,s.mm);
System.out.println(s.nn+" "+s.mm[0]);
}
}
最后s的nn值为9 s.mm[0]为4