Java中传值与传递引用的区分

基本类型传的是值,例如:int,float,double,char,不包括 java.lang.String

对象实例,接口实例传的是引用,包括java.lang.String。但是我们在通过一个函数传递String参数时,为何出来的结果没有发生改变?如下所示:

void public func(String str){
	str = "ssss";
}
String  str = "s";
func(str);
System.out.println(str); //结果还是输出 “s”


这是因为在func函数的  str = "ssss"  语句中,它潜在地 new 了一个对象,改变了对原始变量 str 的引用,因此 str = “ssss” 语句并不是作用在原始 str 变量中中。所以在函数退出时,原来的 String 参数还是没有改变。 不过话说回来,对于其他类型的对象实例,我们传递的均是引用,会改变传入参数的值。


本质来说,传引用也是传值(句柄的值)。
在函数里如果改变句柄的值:
比如新new了一个对象,句柄值就传不出来,换个说法,如果你想让传进去对象(不是句柄)出了函数改变的话,一般都有.操作符,即
句柄.对象成员 = 新值。
用c语言的观点是,传一个对象的句柄就是传进去一级指针比如p,如果你用了
p = new XXX或者p++;出来后根本不改变主调函数的p指向的内容。但是如果你用p->member = xxx;出来的话p指向的内容就改变了。
所以总结一下,java是传值的(基本变量传的是值的拷贝,对象传的句柄的拷贝)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值