美文网首页
家人不用再担心面试卡壳了——Java函数调用 值传递、引用传递

家人不用再担心面试卡壳了——Java函数调用 值传递、引用传递

作者: Phoebe_Liu | 来源:发表于2018-10-24 11:59 被阅读0次

这个部分其实考究的是:是否可以准确理解每个变量存储的是值or地址(引用)?值存在常量池or堆?
链接:https://www.zhihu.com/question/31203609/answer/50992895

传值的方式传引用。 或者说传值的方式传地址

参数传递基本上就是赋值操作。第一个例子:基本类型

void foo(int value) {
    value = 100;
}
foo(num); // num 没有被改变

第二个例子:没有提供改变自身方法的引用类型

void foo(String text) {
    text = "windows";
}
foo(str); // str 也没有被改变

第三个例子:提供了改变自身方法的引用类型

StringBuilder sb = new StringBuilder("iphone");
void foo(StringBuilder builder) {
    builder.append("4");
}
foo(sb); // sb 被改变了,变成了"iphone4"。

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

StringBuilder sb = new StringBuilder("iphone");
void foo(StringBuilder builder) {
    builder = new StringBuilder("ipad");
}
foo(sb); // sb 没有被改变,还是 "iphone"。

用图解释一下第四个例子:


String传递1.jpg String传递2.jpg
  • 数组也是对象。所以当我们传递一个数组引用给一个方法时,数组的元素是可以被改变的,但是无法让数组引用指向新的数组。
  • 一个方法不能修改一个基本数据类型的参数
  • 一个方法可以修改一个对象参数的状态
  • 一个方法不能实现让对象参数引用一个新对象

相关文章

网友评论

      本文标题:家人不用再担心面试卡壳了——Java函数调用 值传递、引用传递

      本文链接:https://www.haomeiwen.com/subject/kevttqtx.html