java值传递

java值传递

接触java也有一段日子了,说来惭愧,最近才想起要看下java的参数传递情况,也是一个困扰了我一段日子的问题。

  • 要搞清楚java的值传递,首先要分清楚什么是引用和对象。
  • 例如下面的例子Person person=new Person();
  • 当我们声明了Person person过后能不能直接拿来用呢,答案是否定的,肯定是不可以的,只有在为其申请了地址空间过后才能使用,Person person就是一个引用,new person就是一个对象,一个对象可以指向很多个引用,但是一个引用只能有一个对象。
  • 例如String string=new String(“123”);
  • 当我们再次对其赋值String string =new String(“234”);
  • 会发现它的值变成了234。
  • 这时候我们可以String newString =sting.
  • 将他的对象再赋值给newString。

回来说到java的值传递

java中方法参数传递方式是按值传递。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。
不难理解,比如我们传入int值过后,不论代码里面怎么改变,都不会改变原来的值,但是当我们写出如下的代码

 StringBuffer string =new StringBuffer("123");
 setString(string);

    public void setString(StringBuffer s){
        s.append("123");
    }

会惊讶的发现string的值变成了123123,回到这句话,传递的是该参量所引用的对象在堆中地址值的拷贝。也就是说,当我们运行该函数的时候,将会复制一个StringBuffer对象,他的引用指向string ,所以当我们改变了s的值的时候,由于他们共享一个对象,所以 string的值也会改变。

StringBuffer string =new StringBuffer("123");
setString(string);
    public void setString(StringBuffer s){
        s=new StringBuffer("234");
    }

同理,上面的例子,为什么s的值不会改变,因为s是string的拷贝,当重新为他分配引用过后,他就会指向一个全新的对象,所以,原来的值肯定不会改变的。

如果有任何问题欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值