老铁们,能具体解释一下吗?

import java.util.Arrays;
public class Demo{
    private String str="1234";
    private char[] chars={'a','b','c'};
    public static void main(String[] args){
        Demo demo=new Demo();
        System.out.println(demo.str+"  "+ Arrays.toString(demo.chars));
        change(demo.str,demo.chars);
        System.out.println(demo.str+"  "+ Arrays.toString(demo.chars));
    }
    public static void change(String str,char[] chars){
        str="5678";
        chars[2]='b';
    }
}
全部评论
String 是对象,ch是数组 change的时候在字符串缓冲池当中创建了新的对象,但是并不改变原来的,当函数执行完毕的时候返回后对应的虚拟机也出栈了,5678 已经没用了,连个引用都不剩下 数组是因为在参数传递的时候用的是地址,直接修改存储的数值,所以修改的值会被保留
点赞 回复 分享
发布于 2017-09-23 16:26
上条解释错了,java的所有参数传递都是值传递,这个你试一下就知道了
点赞 回复 分享
发布于 2017-09-23 16:23
string是final类
点赞 回复 分享
发布于 2017-09-23 16:22
看书去,参数传递
点赞 回复 分享
发布于 2017-09-23 16:21
change()把堆里面的地址传递给栈,栈里面可以通过这个地址访问堆里面的对象,进入对象内部修改内容,但是一旦修改栈里引用的指向,只会修改栈里指向的地址
点赞 回复 分享
发布于 2017-09-23 16:21

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务