Java 中的值传递和引用传递

Java 中的值传递适用于基本数据类型,而引用传递则传递的是对象的地址值

这里我找到了几个自我感觉比较好的,关于值传递和引用传递的例题

1、StringBuilder

public class Test {
public static void main(String[] args) {
   StringBuffer a = new StringBuffer("A"); 
   StringBuffer b = new StringBuffer("B"); 
   operator(a, b); 
   System.out.println(a + "," + b); 
} 
public static void operator(StringBuffer x, StringBuffer y) { 
   x.append(y); y = x; 
}
}

判断这里的输出结果:
首先可以看到,向 operator 中传递的是一个对象,然后 x 的值发生了修改,y 只是一个指针又指向了 x 所指向的 a,b 的内容没有发生任何改变,因此输出的结果为:AB, B
如果需要画图来表示的话就是这个样子:
在这里插入图片描述
这是函数执行完成之后,已经弹出栈之后的画面。

2、char

public class Example {
    String str = new String("good");
    char[] ch = { 'a', 'b', 'c' };
 
    public static void main(String args[]) {
        Example ex = new Example();
        ex.change(ex.str, ex.ch);
        System.out.print(ex.str + " and ");
        System.out.print(ex.ch);
    }
 
   public void change(String str, char ch[])      
   {
        str = "test ok";
        ch[0] = 'g';
    }
}

这个和上一个的分析方式类似,传入函数的 str 和 ch 是一个引用类型的对象,在函数内部中,对 ch 的代码进行了修改,但是 str 又指向了一个新的字符串 “test ok” 因此字符串的结果没有变化,字符数组的结果发生了变化。
结果为:good and gbc
图示如下:
在这里插入图片描述

3、Integer

public class Tester{
public static void main(String[] args){
   Integer var1=new Integer(1);
   Integer var2=var1;
   doSomething(var2);
   System.out.print(var1.intValue());
   System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
    integer=new Integer(2);
    }
}

Integer 同样也是一个对象,传入了 integer 到 doSomething 之后,又在函数内部将原先指向 var2 所指向的地址值的参数,integer 又指向了 new Integer(2) 这个对象,对原来的 new Integer(1) 没有任何修改,因此返回的结果为 true。
在这里插入图片描述

这是函数调用还没有结束时的画面,如果结束了 integer 是要弹出去的。
还有一个图作为补充可以看一下:
在这里插入图片描述
参考博客:

  • https://blog.csdn.net/qq_25827845/article/details/52605633
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值