java值传递,引用传递,数组传递

Java关于值传递的问题,

基本数据类型以及基本类型数组元素均为值传递,即值的拷贝,传值后修改,不会改变原来的值

对象(数组,集合等),非基本类型数组元素为引用传递,传值后修改,会改变原来的值

字符串类型分情况讨论,如果是(String str)即引用传递,(“XXX”)值传递

详见

Java:按值传递还是按引用传递详细解说  

http://blog.csdn.net/zzp_403184692/article/details/8184751

Java值传递以及引用的传递、数组的传递!!  


http://blog.csdn.net/niuniu20008/article/details/2953785


  1. public class Test{
  2.     
  3.     public void change(StringBuffer x,StringBuffer y){
  4.         
  5.         x.append(y);
  6.         y=x;    
  7.     }
  8.     public static void main(String[] args){
  9.     
  10.         StringBuffer buffA = new StringBuffer("a");
  11.         StringBuffer buffB = new StringBuffer("b");
  12.         new Test().change(buffA,buffB);
  13.         System.out.println(buffA+","+buffB);   
  14.     }
  15. }
buffA,buffB均是引用传递,但是前者值改变,后者值不变,buffA通过append()拼接值为ab,而buffB是讲x的引用赋值给y,不是将值赋值给y,所以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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值