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的拷贝,当重新为他分配引用过后,他就会指向一个全新的对象,所以,原来的值肯定不会改变的。

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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

小小巴

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者