java常见面试题:java为什么是值传递

刚接触java的时候,就被告知,java中都是值传递,作为初学者,不求甚解。直到看到某个博主总结的一句话,才恍然大悟。

java中都是值传递,完整的意思是java中按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值所以统称按值传递。

 

其实大家纠结java到底是值传递还是引用传递,主要是以下四种场景造成的:

(例子转载自链接:https://www.zhihu.com/question/31203609/answer/50992895,作者:Intopass)

第一个场景:参数是基本类型

void foo(int value) {

value = 100;

}

foo(num); // 基本类型都是值传递,num 没有被改变

 

第二个场景:参数是没有提供改变自身方法的引用类型

void foo(String text) {

text = "windows";

}

foo(str); // 引用的地址值传递,由于String类没有改变自身的方法,text = "windows"相当于text = new String("windows"),原str 字符串并没有被改变

 

第三个场景:参数是提供了改变自身方法的引用类型

StringBuilder sb = new StringBuilder("iphone");

void foo(StringBuilder builder) {

builder.append("11");

}

foo(sb); // 引用但地址值传递,sb 地址值对应的堆中的对象被改变了,变成了"iphone11"。

 

第四个场景:参数是提供了改变自身方法的引用类型,但是不使用改变自身的方法,而是使用赋值运算符。

StringBuilder sb = new StringBuilder("iphone");

void foo(StringBuilder builder) {

builder = new StringBuilder("ipad");

}

foo(sb); // 引用的地址值传递,foo方法里面新建了一个StringBuilder,sb 地址值对应的堆中的对象没有被改变,还是 "iphone"。

 

综上,得出结论:java中都是值传递。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值