JAVA赋值和传参理解

作者:Intopass
链接: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"。

第三个例子中,sb这个地址指向的是iphone这个对象,调用方法的时候builder这个地址也指向了iphone这个对象,然后两个地址指向的是同一个对象,当然在方法内更改后方法外看到的就跟着更改了。

第四个例子中,sb这个地址指向的是iphone这个对象,调用方法的时候builder这个地址也指向了iphone这个对象,然后执行“builder = new StringBuilder("ipad");”的时候,builder这个地址指向了ipad这个对象,很自然,sb这个对象的值没有发生任何变化。

猜你喜欢

转载自my.oschina.net/u/2246523/blog/1636111