java中的值传递和引用传递

Java的值传递和引用传递,值传递作用域只在局部函数内部,不会对外部对象的值做更改。引用传递时如果使用同一内存空间,则外部值将更改,如果另开辟空间,则不更改原内存的值。
具体实例如下:
public class TestStr {

public static void main(String []args)
{
// String str = new String("World"); 1
String str = "World"; //2
char ch[] = {'h','e','l','l','o'};
change(str,ch);
System.out.println(str+" and " ); //3
System.out.println(ch);//3
System.out.println(str+" and " + ch); //4
}
public static void change(String s,char ch[])
{
s = "change";//7
ch = new char[]{'h','e','l','e','n'}; //5
// ch[0] = 'c'; //6
}
}

程序说明:
1、2处输出效果相同。
3将字符串与数组的输出分开,如果按照4输出,如果想输出数组的内容,则需要显式转换,将ch转为字符串,否则将输出ch数组在内存中的地址。
5在局部函数中为ch另开辟空间,并赋值,此时原内存地址中的值没有改变,所以main中的ch值没有改变。
6针对传入的ch,将ch[0]空间内的值改为'c',是对原始ch空间的改变,所以更改将在外部生效。
7对于String类型,本质是一个值,如果把值当做空间A,那么在局部函数中,系统又重建了一个一模一样的空间B,更改只对B空间生效,A中的值仍没有变化,所以Main中str还是原来的值。

执行结果:
135输出World and hello。145输出World and [C@de6ced。146输出World and cello。

总结:
值传递的作用域只在本函数内,除非return并赋值回去,否则不会发生变化。
分析引用传递是否改变了原始值,主要看原始内存地址中的值是否发生了变化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值