java传参

java的传参是按值传参(我现在的理解) 

1、基本数据类型作为变量(变量的复制品);

所以要改变要像c/c++那样可写一个可以交换基本类型变量值的函数在java中要费劲的多。

2、对象引用作为参数,其实传入的也只是对象的引用的复制品(不是对象的复制品),本质上还是按值传参,但是这些应用的复制品不管有多少个,总之还是指向同一个对象。除非你把它指向另外的对象或者置为null,否则你通过引用操纵对象成员一定能够改变对象的内容。假如大家不理解,可以看我下面的例子:

class Test
{
 public static void main(String args[])
 {
  int val;
  StringBuffer sb1, sb2;
  
  val = 10;
  sb1 = new StringBuffer("apples");
  sb2 = new StringBuffer("pears");
  System.out.println("val is " + val);
  System.out.println("sb1 is " + sb1);
  System.out.println("sb2 is " + sb2);
  System.out.println("***********************");
  System.out.println("calling modify");
  //按值传递所有参数
  modify(val, sb1, sb2);
  System.out.println("returned from modify");
  System.out.println("***********************");
  
  System.out.println("val is " + val);
  System.out.println("sb1 is " + sb1);
  System.out.println("sb2 is " + sb2);
 }
  
 public static void modify(int a, StringBuffer r1,StringBuffer r2)
 {
  a = 0;  //基本变量还是按值传递
  r1 = r2; //引用一样是按值传递,其作用域是有限制的,不是把r2的地址给r1,赋予的只是一个引用变量。
  r2.append(" taste good");//操纵原对象的值。
  r1=r2;
  System.out.println("方法中a is " + a);
  System.out.println("方法中r1 is " + r1);
  System.out.println("方法中r2 is " + r2);
 }
}

结果:

val is 10
sb1 is apples
sb2 is pears
***********************
calling modify
方法中a is 0
方法中r1 is pears taste good
方法中r2 is pears taste good
returned from modify
***********************
val is 10
sb1 is apples
sb2 is pears taste good

3、要注意String类型以及所有的基本类型的Wrrapper类有特殊情况,他们的引用改变不了他们所指向的对象的值。因为他们是IMMUTABLE类。只有将改变后的对象作为返回值才能得到改变后的对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值